
/*
 FusionCharts JavaScript Library
 Copyright FusionCharts Technologies LLP
 License Information at <http://www.fusioncharts.com/license>

 @author FusionCharts Technologies LLP
 @version fusioncharts/3.2.3-sr1.5347
*/
(function () {
	function ta(a) {
		a = (a || 0) % ua;
		return a < 0 ? ua + a : a;
	}
	function ya(a, c, d, b, g, m, e, f, k, l) {
		if (typeof a === "object") {
			c = a.y, d = a.r, b = a.innerR, g = a.radiusYFactor, m = a.depth, e = a.seriesGroup, f = a.renderer, a = a.x;
		}
		if (g < 0 || g >= 1) {
			g = 0.6;
		}
		a = a || 0;
		c = c || 0;
		d = d || 1;
		b = b || 0;
		m = m || 0;
		this.renderer = f;
		this.hasOnePoint = k;
		this.use3DLighting = l;
		this.cx = a;
		this.cy = c;
		this.rx = d;
		this.ry = d * g;
		this.radiusYFactor = g;
		this.isDoughnut = b > 0;
		this.innerRx = b;
		this.innerRy = b * g;
		this.depth = m;
		this.leftX = a - d;
		this.rightX = a + d;
		this.leftInnerX = a - b;
		this.rightInnerX = a + b;
		this.depthY = c + m;
		this.topY = c - this.ry;
		this.bottomY = this.depthY + this.ry;
		this.bottomBorderGroup = f.g("bottom-border").add(e).translate(0, m);
		this.outerBackGroup = f.g("outer-back-Side").add(e);
		this.slicingWallsBackGroup = f.g("slicingWalls-back-Side").add(e);
		this.innerBackGroup = f.g("inner-back-Side").add(e);
		this.innerFrontGroup = f.g("inner-front-Side").add(e);
		this.slicingWallsFrontGroup = f.g("slicingWalls-front-Side").add(e);
		this.outerFrontGroup = f.g("outer-front-Side").add(e);
		this.topGroup = f.g("top-Side").add(e);
		this.moveCmdArr = [G];
		this.lineCmdArr = [N];
		this.closeCmdArr = [K];
		this.centerPoint = [a, c];
		this.leftPoint = [this.leftX, c];
		this.topPoint = [a, this.topY];
		this.rightPoint = [this.rightX, c];
		this.bottomPoint = [a, c + this.ry];
		this.leftDepthPoint = [this.leftX, this.depthY];
		this.rightDepthPoint = [this.rightX, this.depthY];
		this.leftInnerPoint = [this.leftInnerX, c];
		this.rightInnerPoint = [this.rightInnerX, c];
		this.leftInnerDepthPoint = [this.leftInnerX, this.depthY];
		this.rightInnerDepthPoint = [this.rightInnerX, this.depthY];
		this.pointElemStore = [];
		this.slicingWallsArr = [];
		a = [da, this.rx, this.ry, 0, 0, 1, this.rightX, c];
		d = [da, this.rx, this.ry, 0, 0, 1, this.leftX, c];
		b = [da, this.rx, this.ry, 0, 0, 0, this.rightX, this.depthY];
		g = [da, this.rx, this.ry, 0, 0, 0, this.leftX, this.depthY];
		m = [da, this.innerRx, this.innerRy, 0, 0, 0, this.rightInnerX, c];
		c = [da, this.innerRx, this.innerRy, 0, 0, 0, this.leftInnerX, c];
		e = [da, this.innerRx, this.innerRy, 0, 0, 1, this.rightInnerX, this.depthY];
		f = [da, this.innerRx, this.innerRy, 0, 0, 1, this.leftInnerX, this.depthY];
		this.isDoughnut ? (this.topBorderPath = this.moveCmdArr.concat(this.leftPoint, a, d, this.moveCmdArr, this.leftInnerPoint, m, c), this.topPath = this.moveCmdArr.concat(this.leftPoint, a, d, this.lineCmdArr, this.leftInnerPoint, m, c, this.closeCmdArr), this.innerFrontPath = this.moveCmdArr.concat(this.leftInnerPoint, m, this.lineCmdArr, this.rightInnerDepthPoint, f, this.closeCmdArr), this.innerBackPath = this.moveCmdArr.concat(this.rightInnerPoint, c, this.lineCmdArr, this.leftInnerDepthPoint, e, this.closeCmdArr)) : this.topBorderPath = this.topPath = this.moveCmdArr.concat(this.leftPoint, a, d, this.closeCmdArr);
		this.outerBackPath = this.moveCmdArr.concat(this.leftPoint, a, this.lineCmdArr, this.rightDepthPoint, g, this.closeCmdArr);
		this.outerFrontPath = this.moveCmdArr.concat(this.rightPoint, d, this.lineCmdArr, this.leftDepthPoint, b, this.closeCmdArr);
		this.clipPathforOuter = [G, this.leftX, this.topY, N, this.rightX, this.topY, this.rightX, this.bottomY, this.leftX, this.bottomY, K];
		this.clipPathforInner = [G, this.leftInnerX, this.topY, N, this.rightInnerX, this.topY, this.rightInnerX, this.bottomY, this.leftInnerX, this.bottomY, K];
		this.clipPathforNoClip = [G, this.leftInnerX, this.topY, N, this.leftInnerX, this.bottomY, K];
	}
	var na = FusionCharts(["private", "modules.renderer.highcharts-charts"]);
	if (na !== void 0) {
		var t = na.hcLib, J = t.BLANKSTRING, Fa = t.createTrendLine, r = t.pluck, Z = t.getValidValue, n = t.pluckNumber, Y = t.defaultPaletteOptions, oa = t.getFirstValue, $a = t.getDefinedColor, ja = t.parseUnsafeString, S = t.FC_CONFIG_STRING, Ga = t.extend2, pa = t.getDashStyle, ab = t.toPrecision, bb = t.stubFN, L = t.Highcharts, cb = L.Series, ea = L.hasSVG, Ra = L.hasTouch, Sa = L.isIE, db = L.extend, Ta = L.merge, za = L.pick, ia = L.each, Aa = L.attr, Ha = L.map, na = L.seriesTypes, va = L.addEvent, eb = L.getPosition, Ba = L.getOptions().plotOptions, qa = function (a) {
			return a !== Ia && a !== null;
		}, Ia, fb = "rgba(192,192,192," + (ea ? 0.000001 : 0.002) + ")", ma = Sa && !ea ? "visible" : "", G = "M", N = "L", da = "A", K = "Z", fa = Math, aa = fa.sin, ca = fa.cos, gb = fa.atan2, Ca = fa.round, Ja = fa.min, ka = fa.max, Ua = fa.abs, Ka = fa.PI, Ja = fa.min, ra = Ka / 180, $ = Math.PI, Da = $ / 2, ua = 2 * $, Va = $ + Da, hb = t.graphics.getColumnColor, M = t.getFirstColor, La = t.setLineHeight, Wa = t.pluckFontSize, wa = t.getFirstAlpha, sa = t.graphics.getDarkColor, la = t.graphics.getLightColor, X = t.graphics.convertColor, Ma = t.COLOR_TRANSPARENT, Na = t.POSITION_CENTER, ib = t.POSITION_TOP, Ea = t.POSITION_BOTTOM, jb = t.POSITION_RIGHT, kb = t.POSITION_LEFT, h = t.chartAPI, lb = t.titleSpaceManager, mb = t.placeLegendBlockBottom, nb = t.placeLegendBlockRight, Xa = t.graphics.mapSymbolName, Ya = h.singleseries, y = t.COMMASTRING, Za = t.STRINGUNDEFINED, ga = t.ZEROSTRING, xa = t.ONESTRING, ba = t.HUNDREDSTRING, Oa = t.PXSTRING, ob = t.COMMASPACE;
		h("column2d", {standaloneInit:!0, creditLabel:!0}, h.column2dbase);
		h("column3d", {defaultSeriesType:"column3d", defaultPlotShadow:1}, h.column2d);
		h("bar2d", {isBar:!0, defaultSeriesType:"bar", spaceManager:h.barbase}, h.column2d);
		h("line", {standaloneInit:!0, creditLabel:!0}, h.linebase);
		h("area2d", {standaloneInit:!0, creditLabel:!0}, h.area2dbase);
		h("pie2d", {standaloneInit:!0, defaultSeriesType:"pie", defaultPlotShadow:1, point:function (a, c, d, b, g) {
			var m, e, f, k = g[S], l = k.is3d, j, i, R, p, Q = 0, s = 0, o = [], F = n(b.plotborderthickness, l ? 0.1 : 1), q = (f = n(b.use3dlighting, 1)) ? n(b.radius3d, b["3dradius"], 90) : 100;
			j = n(b.showzeropies, 1);
			var h = !0, C = n(b.showpercentintooltip, 1), B = n(b.showlabels, 1), v = n(b.showvalues, 1), u = n(b.showpercentvalues, b.showpercentagevalues, 0), D = r(b.tooltipsepchar, b.hovercapsepchar, ob), w = r(b.labelsepchar, D), H = r(b.plotbordercolor, b.piebordercolor), t = g[S].numberFormatter;
			i = d.length;
			var I, x, G = n(b.plotborderdashed, 0), E = n(b.plotborderdashlen, 5), A = n(b.plotborderdashgap, 4);
			q > 100 && (q = 100);
			q < 0 && (q = 0);
			if (n(b.showlegend, 0)) {
				g.legend.enabled = !0, g.legend.reversed = !Boolean(n(b.reverselegend, 0)), c.showInLegend = !0;
			}
			if (!B && !v) {
				g.plotOptions.series.dataLabels.enabled = !1, g.tooltip.enabled === !1 && (h = !1);
			}
			for (a = 0; a < i; a += 1) {
				e = d[a], m = t.getCleanValue(e.value, !0), m === null || !j && m === 0 || (o.push(e), Q += m);
			}
			Q === 0 && (o = []);
			c.enableRotation = o.length > 1 ? n(b.enablerotation, 1) : 0;
			c.is3D = l;
			c.use3DLighting = f;
			c.pieYScale = n(b.pieyscale, 40);
			if (c.pieYScale < 1) {
				c.pieYScale = 1;
			}
			c.pieYScale /= 100;
			c.pieSliceDepth = n(b.pieslicedepth, 15);
			if (c.pieSliceDepth < 1) {
				c.pieSliceDepth = 1;
			}
			c.managedPieSliceDepth = c.pieSliceDepth;
			for (a = o.length - 1; a >= 0; a -= 1) {
				e = o[a];
				m = t.getCleanValue(e.value, !0);
				d = ja(r(e.label, e.name, J));
				j = r(e.color, g.colors[a % g.colors.length]);
				i = r(e.alpha, b.plotfillalpha, ba);
				R = r(e.bordercolor, H, la(j, l ? 90 : 25)).split(y)[0];
				p = b.showplotborder == ga ? ga : r(e.borderalpha, b.plotborderalpha, b.pieborderalpha, "80");
				f = {opacity:Math.max(i, p) / 100};
				if (I = Boolean(n(e.issliced, b.issliced, 0))) {
					k.preSliced = I;
				}
				x = n(e.dashed, G) ? pa(r(e.dashlen, E), r(e.dashgap, A), F) : void 0;
				c.data.push({showInLegend:d !== J, y:m, name:d, shadow:f, toolText:ja(Z(e.tooltext)), color:this.getPointColor(j, i, q), _3dAlpha:i, borderColor:X(R, p), borderWidth:F, link:Z(e.link), sliced:I, dashStyle:x, doNotSlice:r(b.enableslicing, xa) != xa});
				if (h) {
					j = t.percentValue(m / Q * 100), i = t.dataLabels(m) || J, f = C === 1 ? j : i, m = B === 1 ? d : J, j = v === 1 ? u === 1 ? j : i : J, j = (e = Z(e.displayvalue)) ? e : j !== J && m !== J ? m + w + j : r(m, j), d = d != J ? d + D + f : f, e = c.data[s], e.displayValue = j, e.toolText = r(e.toolText, d), s += 1;
				}
			}
			g.legend.enabled = b.showlegend == xa ? !0 : !1;
			g.chart.startingAngle = r(b.startingangle, 0);
			return c;
		}, getPointColor:function (a, c, d) {
			var b, g, a = M(a), c = wa(c);
			d < 100 && ea ? (b = Math.floor((100 - 0.35 * d) * 85) / 100, b = sa(a, b), g = Math.floor((100 + d) * 50) / 100, a = la(a, g), c = {FCcolor:{color:a + y + b, alpha:c + y + c, ratio:d + ",100", radialGradient:!0}}) : c = {FCcolor:{color:a + y + a, alpha:c + y + c, ratio:"0,100"}};
			return c;
		}, configureAxis:function (a) {
			var c = 0, d = a[S], b;
			a.plotOptions.series.dataLabels.style = a.xAxis.labels.style;
			a.plotOptions.series.dataLabels.color = a.xAxis.labels.style.color;
			delete d.x;
			delete d[0];
			delete d[1];
			a.chart.plotBorderColor = a.chart.plotBackgroundColor = Ma;
			d = d.pieDATALabels = [];
			if (a.series.length === 1 && (b = a.series[0].data) && (c = a.series[0].data.length) > 0 && a.plotOptions.series.dataLabels.enabled) {
				for (; c--; ) {
					b[c] && Z(b[c].displayValue) !== void 0 && d.push(b[c].displayValue);
				}
			}
		}, spaceManager:function (a, c, d, b) {
			var g = a[S], m = g.is3d, e = this.name, f = g.smartLabel, k = n(g.pieDATALabels && g.pieDATALabels.length, 0), l = 0, j = c.chart, i = n(j.managelabeloverflow, 0), R = !g.preSliced && j.enableslicing == ga && (j.showlegend != xa || j.interactivelegend == ga) ? 0 : n(j.slicingdistance, 20), p = n(j.pieradius, 0), Q = n(j.enablesmartlabels, j.enablesmartlabel, 1), s = Q ? n(j.skipoverlaplabels, j.skipoverlaplabel, 1) : 0, o = n(j.issmartlineslanted, 1), F = n(j.labeldistance, j.nametbdistance, 5), q = n(j.smartlabelclearance, 5);
			d -= a.chart.marginRight + a.chart.marginLeft;
			var h = b - (a.chart.marginTop + a.chart.marginBottom), b = Math.min(h, d), C = r(j.smartlinecolor, Y.plotFillColor[a.chart.paletteIndex]), B = n(j.smartlinealpha, 100), v = n(j.smartlinethickness, 1), u = a.plotOptions.series.dataLabels, D = u.style, w = n(parseInt(D.lineHeight, 10), 12), H = a.series[0], t = H.pieYScale, I = H.pieSliceDepth, b = p === 0 ? b * 0.15 : p, x = 0, x = 2 * b;
			u.connectorWidth = v;
			u.connectorColor = X(C, B);
			h -= lb(a, c, d, x < h ? h - x : h / 2);
			j.showlegend == xa && (r(j.legendposition, Ea).toLowerCase() != jb ? h -= mb(a, c, d, h / 2, !0) : d -= nb(a, c, d / 3, h, !0));
			f.setStyle(D);
			if (k !== 1) {
				for (; k--; ) {
					c = f.getOriSize(g.pieDATALabels[k]), l = Math.max(l, c.width);
				}
			}
			Q && (F = q + R);
			p === 0 && (m ? (h -= I, x = Math.min(d / 2 - l, (h / 2 - w) / t) - F) : x = Math.min(d / 2 - l, h / 2 - w) - F, x >= b ? b = x : F = Math.max(F - (b - x), R));
			if (m && (k = h - 2 * (b * t + w), I > k)) {
				H.managedPieSliceDepth = I - k;
			}
			a.plotOptions.pie3d.slicedOffset = a.plotOptions.pie.slicedOffset = R;
			a.plotOptions.pie3d.size = a.plotOptions.pie.size = 2 * b;
			a.plotOptions.series.dataLabels.distance = F;
			a.plotOptions.series.dataLabels.isSmartLineSlanted = o;
			a.plotOptions.series.dataLabels.enableSmartLabels = Q;
			a.plotOptions.series.dataLabels.skipOverlapLabels = s;
			a.plotOptions.series.dataLabels.manageLabelOverflow = i;
			if (e === "doughnut2d" || e === "doughnut3d") {
				if (e = n(j.doughnutradius, 0), k = n(j.use3dlighting, 1) ? n(j.radius3d, j["3dradius"], 50) : 100, k > 100 && (k = 100), k < 0 && (k = 0), j = e === 0 || e >= b ? b / 2 : e, a.plotOptions.pie3d.innerSize = a.plotOptions.pie.innerSize = 2 * j, k > 0 && ea && (j = parseInt(j / b * 100, 10), e = (100 - j) / 2, k = parseInt(e * k / 100, 10), j = j + y + k + y + 2 * (e - k) + y + k, a.series[0] && a.series[0].data)) {
					i = a.series[0].data;
					a = 0;
					for (k = i.length; a < k; a += 1) {
						if (e = i[a], e.color.FCcolor) {
							e.color.FCcolor.ratio = j;
						}
					}
				}
			}
		}, creditLabel:!0, eiMethods:{togglePieSlice:function (a) {
			var c = this.jsVars.hcObj, d;
			if (c && c.series && (d = c.series[0]) && d.data && d.data[a] && d.data[a].slice) {
				return d.data[d.xIncrement - 1 - a].slice();
			}
		}}}, Ya);
		h("pie3d", {defaultSeriesType:"pie3d", creditLabel:!0, getPointColor:function (a) {
			return a;
		}, defaultPlotShadow:0}, h.pie2d);
		h("doughnut2d", {getPointColor:function (a, c, d) {
			var b, a = M(a), c = wa(c);
			d < 100 && ea ? (b = Math.floor((85 - 0.2 * (100 - d)) * 100) / 100, b = sa(a, b), d = Math.floor((100 - 0.5 * d) * 100) / 100, a = la(a, d), c = {FCcolor:{color:b + y + a + y + a + y + b, alpha:c + y + c + y + c + y + c, radialGradient:!0}}) : c = {FCcolor:{color:a + y + a, alpha:c + y + c, ratio:"0,100"}};
			return c;
		}}, h.pie2d);
		h("doughnut3d", {defaultSeriesType:"pie3d", getPointColor:h.pie3d, defaultPlotShadow:0}, h.doughnut2d);
		h("pareto2d", {standaloneInit:!0, point:function (a, c, d, b, g) {
			var m, e, f, k, l, j, i, R, p, Q, s, o, h, q, W, a = d.length, C = 0;
			j = {};
			h = g.chart.paletteIndex;
			var B = /3d$/.test(g.chart.defaultSeriesType), v = this.isBar, u = r(360 - b.plotfillangle, 90), D = n(b.plotborderthickness, 1), w = g.chart.useRoundEdges, H = r(b.tooltipsepchar, ", "), t = r(b.plotbordercolor, Y.plotBorderColor[h]).split(y)[0], I = b.showplotborder == ga ? ga : r(b.plotborderalpha, b.plotfillalpha, ba), x = g.xAxis, G = n(b.showcumulativeline, 1), E = g[S], A = E.axisGridManager, N = E.x, K = b.showtooltip != ga, z = [], O = [], V = n(b.use3dlighting, 1), P = g[S].numberFormatter, L = n(b.showlinevalues, b.showvalues), T = n(b.plotborderdashed, 0), $ = n(b.plotborderdashlen, 5), aa = n(b.plotborderdashgap, 4), I = B ? b.showplotborder ? I : ga : I, t = B ? r(b.plotbordercolor, "#FFFFFF") : t;
			for (o = e = 0; e < a; e += 1) {
				if (s = d[e], d[e].vline) {
					A.addVline(x, s, o, g);
				} else {
					if (m = P.getCleanValue(s.value, !0), m !== null) {
						s.value = m, z.push(s), o += 1;
					}
				}
			}
			a = z.length;
			z.sort(function (a, b) {
				return b.value - a.value;
			});
			if (G) {
				i = n(b.linedashed, 0), q = M(r(b.linecolor, Y.plotBorderColor[h])), e = r(b.linealpha, 100), R = n(b.linedashlen, 5), p = n(b.linedashgap, 4), j = n(b.linethickness, 2), Q = {opacity:e / 100}, W = n(b.drawanchors, b.showanchors), W === void 0 && (W = e != ga), f = n(b.anchorborderthickness, 1), l = n(b.anchorsides, 0), k = n(b.anchorradius, 3), o = M(r(b.anchorbordercolor, q)), m = M(r(b.anchorbgcolor, Y.anchorBgColor[h])), d = wa(r(b.anchoralpha, ba)), s = wa(r(b.anchorbgalpha, d)) * d / 100, i = i ? pa(R, p, j) : void 0, j = {yAxis:1, data:[], type:"line", color:X(q, e), lineWidth:j, marker:{enabled:W, fillColor:X(m, s), lineColor:X(o, d), lineWidth:f, radius:k, symbol:Xa(l), startAngle:r(b.anchorstartangle, 90)}};
			} else {
				if (b.showsecondarylimits !== "1") {
					b.showsecondarylimits = "0";
				}
				if (b.showdivlinesecondaryvalue !== "1") {
					b.showdivlinesecondaryvalue = "0";
				}
			}
			for (e = 0; e < a; e += 1) {
				s = z[e], m = n(s.showlabel, b.showlabels, 1), d = ja(!m ? J : oa(s.label, s.name)), A.addXaxisCat(x, e, e, d), C += m = s.value, f = r(s.color, g.colors[e % g.colors.length]) + y + $a(b.plotgradientcolor, Y.plotGradientColor[h]), k = r(s.alpha, b.plotfillalpha, ba), l = r(s.ratio, b.plotfillratio), o = {opacity:k / 100}, q = r(s.alpha, I) + J, f = hb(f, k, l, u, w, t, q, v, B), c.data.push(Ga(this.getPointStub(s, m, d, g), {y:m, shadow:o, color:f[0], borderColor:f[1], borderWidth:D, use3DLighting:V, dashStyle:n(s.dashed, T) == 1 ? pa($, aa, D) : ""})), this.pointValueWatcher(g, m), G && O.push({value:C, dataLabel:d, tooltext:Z(s.tooltext)});
			}
			N.catCount = a;
			E[1] || (E[1] = {});
			E[1].stacking100Percent = !0;
			if (G && C > 0) {
				e = 0;
				for (a = O.length; e < a; e += 1) {
					s = O[e], g = c.data[e], m = s.value / C * 100, h = P.percentValue(m), b = g.displayValue !== J ? h : J, L == 1 && (b = h), L == 0 && (b = J), d = s.dataLabel, h = K ? s.tooltext !== void 0 ? s.tooltext : (d !== J ? d + H : J) + h : J, j.data.push({shadow:Q, y:m, toolText:h, displayValue:b, link:g.link, dashStyle:i});
				}
				return [c, j];
			} else {
				return c;
			}
		}, defaultSeriesType:"column", isDual:!0, creditLabel:!0}, Ya);
		h("pareto3d", {defaultSeriesType:"column3d", defaultPlotShadow:1}, h.pareto2d);
		h("mscolumn2d", {standaloneInit:!0, creditLabel:!0}, h.mscolumn2dbase);
		h("mscolumn3d", {defaultSeriesType:"column3d", defaultPlotShadow:1}, h.mscolumn2d);
		h("msbar2d", {isBar:!0, defaultSeriesType:"bar", spaceManager:h.barbase}, h.mscolumn2d);
		h("msbar3d", {defaultSeriesType:"bar3d", defaultPlotShadow:1}, h.msbar2d);
		h("msline", {standaloneInit:!0, creditLabel:!0}, h.mslinebase);
		h("msarea", {standaloneInit:!0, creditLabel:!0}, h.msareabase);
		h("stackedcolumn2d", {isStacked:!0}, h.mscolumn2d);
		h("stackedcolumn3d", {isStacked:!0}, h.mscolumn3d);
		h("stackedbar2d", {isStacked:!0}, h.msbar2d);
		h("stackedbar3d", {isStacked:!0}, h.msbar3d);
		h("stackedarea2d", {isStacked:!0, showSum:0}, h.msarea);
		h("marimekko", {isValueAbs:!0, distributedColumns:!0, isStacked:!0, xAxisMinMaxSetter:bb, postSeriesAddition:function (a, c) {
			var d = a[S], b, g, m, e, f, k = 0;
			e = a.xAxis;
			var l, j = 100 / d.marimekkoTotal, i = [], R = a.series, p, h = 0, s, o = n(c.chart.plotborderthickness, 1), F = a.chart.rotateValues, q = n(c.chart.rotatexaxispercentvalues, 0), o = o * -0.5 - (o % 2 + (q ? 0 : 4)), r = q ? 3 : 0, C = F ? 270 : 0;
			g = d[0];
			var B = !g.stacking100Percent, v = d.inCanvasStyle;
			d.isXYPlot = !0;
			d.distributedColumns = !0;
			e.min = 0;
			e.max = 100;
			e.labels.enabled = !1;
			e.gridLineWidth = 0;
			e.alternateGridColor = Ma;
			b = g.stack;
			c.chart.interactivelegend = "0";
			f = 0;
			for (g = a.xAxis.plotLines.length; f < g; f += 1) {
				if (l = e.plotLines[f], l.isGrid) {
					l.isCat = !0, i[l.value] = l;
				}
			}
			if (b.floatedcolumn && (m = b.floatedcolumn[0])) {
				b = 0;
				for (g = m.length; b < g; ) {
					k += e = m[b].p || 0;
					p = e * j;
					l = h + p / 2;
					s = h + p;
					for (f = 0; f < R.length; f += 1) {
						a.series[f].data[b]._FCX = h, a.series[f].data[b]._FCW = p;
					}
					d.showStackTotal && a.xAxis.plotLines.push({value:l, width:0, isVline:B, isTrend:!B, label:{align:Na, textAlign:C, rotation:F ? 270 : 0, style:d.trendStyle, verticalAlign:ib, y:0, x:0, text:this.numberFormatter.yAxis(ab(e, 10))}});
					if (i[b]) {
						i[b].value = l, i[b]._weight = p;
					}
					b += 1;
					d.showXAxisPercentValues && b < g && a.xAxis.plotLines.push({value:s, width:0, isVine:!0, label:{align:Na, textAlign:q ? kb : Na, rotation:q ? 270 : 0, style:{color:v.color, fontSize:v.fontSize, fontFamily:v.fontFamily, lineHeight:v.lineHeight, border:"1px solid", borderColor:v.color, backgroundColor:"#ffffff", backgroundOpacity:1}, verticalAlign:Ea, y:o, x:r, text:this.numberFormatter.percentValue(s)}, zIndex:5});
					h = s;
				}
			}
		}, defaultSeriesType:"floatedcolumn"}, h.stackedcolumn2d);
		h("msstackedcolumn2d", {series:function (a, c, d) {
			var b, g, m, e, f = c[S], k = 0, l, j;
			l = [];
			var i;
			c.legend.enabled = Boolean(n(a.chart.showlegend, 1));
			if (a.dataset && a.dataset.length > 0) {
				this.categoryAdder(a, c);
				b = 0;
				for (g = a.dataset.length; b < g; b += 1) {
					if (i = a.dataset[b].dataset) {
						m = 0;
						for (e = i.length; m < e; m += 1, k += 1) {
							l = {data:[], stack:b}, j = Math.min(f.oriCatTmp.length, i[m].data && i[m].data.length), l = this.point(d, l, i[m], a.chart, c, j, k, b), c.series.push(l);
						}
					}
				}
				if (this.isDual && a.lineset && a.lineset.length > 0) {
					m = 0;
					for (e = a.lineset.length; m < e; m += 1, k += 1) {
						l = {data:[], yAxis:1, type:"line"}, d = a.lineset[m], j = Math.min(f.oriCatTmp.length, d.data && d.data.length), c.series.push(h.msline.point.call(this, "msline", l, d, a.chart, c, j, k));
					}
				}
				this.configureAxis(c, a);
				a.trendlines && Fa(a.trendlines, c.yAxis, c[S], !1, this.isBar);
			}
		}}, h.stackedcolumn2d);
		h("mscombi2d", {series:function (a, c, d) {
			var b, g, m, e, f = a.chart, k, l = [], j = [], i = [], R, p, Q = c[S], s = this.isDual;
			c.legend.enabled = Boolean(n(a.chart.showlegend, 1));
			if (a.dataset && a.dataset.length > 0) {
				this.categoryAdder(a, c);
				e = Q.oriCatTmp.length;
				b = 0;
				for (g = a.dataset.length; b < g; b += 1) {
					m = a.dataset[b];
					R = s && r(m.parentyaxis, "p").toLowerCase() === "s" ? !0 : !1;
					k = {data:[]};
					if (R) {
						k.yAxis = 1;
					}
					p = oa(m.renderas, J).toLowerCase();
					switch (p) {
					  case "line":
						k.type = "line";
						l.push(h.msline.point.call(this, d, k, m, f, c, e, b));
						break;
					  case "area":
						k.type = "area";
						c.chart.series2D3Dshift = !0;
						i.push(h.msarea.point.call(this, d, k, m, f, c, e, b));
						break;
					  case "column":
						j.push(h.mscolumn2d.point.call(this, d, k, a.dataset[b], f, c, e, b));
						break;
					  default:
						R ? (k.type = "line", l.push(h.msline.point.call(this, d, k, m, f, c, e, b))) : j.push(h.mscolumn2d.point.call(this, d, k, a.dataset[b], f, c, e, b));
					}
				}
				c.series = f.areaovercolumns !== "0" ? c.series.concat(j, i, l) : c.series.concat(i, j, l);
				if (j.length === 0) {
					Q.hasNoColumn = !0;
				}
				this.configureAxis(c, a);
				a.trendlines && Fa(a.trendlines, c.yAxis, c[S], s, this.isBar);
			}
		}}, h.mscolumn2d);
		h("mscombi3d", {series:h.mscombi2d.series, eiMethods:"view2D,view3D,resetView,rotateView,getViewAngles,fitToStage"}, h.mscolumn3d);
		h("mscolumnline3d", {}, h.mscombi3d);
		h("stackedcolumn2dline", {isStacked:!0, stack100percent:0}, h.mscombi2d);
		h("stackedcolumn3dline", {isStacked:!0, stack100percent:0}, h.mscombi3d);
		h("mscombidy2d", {isDual:!0}, h.mscombi2d);
		h("mscolumn3dlinedy", {isDual:!0}, h.mscolumnline3d);
		h("stackedcolumn3dlinedy", {isDual:!0}, h.stackedcolumn3dline);
		h("msstackedcolumn2dlinedy", {isDual:!0, stack100percent:0}, h.msstackedcolumn2d);
		h("scrollcolumn2d", {postSeriesAddition:h.scrollbase.postSeriesAddition, avgScrollPointWidth:40}, h.mscolumn2d);
		h("scrollline2d", {postSeriesAddition:h.scrollbase.postSeriesAddition, avgScrollPointWidth:75}, h.msline);
		h("scrollarea2d", {postSeriesAddition:h.scrollbase.postSeriesAddition, avgScrollPointWidth:75}, h.msarea);
		h("scrollstackedcolumn2d", {postSeriesAddition:function (a, c, d, b) {
			h.base.postSeriesAddition.call(this, a, c, d, b);
			h.scrollbase.postSeriesAddition.call(this, a, c, d, b);
		}, avgScrollPointWidth:75}, h.stackedcolumn2d);
		h("scrollcombi2d", {postSeriesAddition:h.scrollbase.postSeriesAddition, avgScrollPointWidth:40}, h.mscombi2d);
		h("scrollcombidy2d", {postSeriesAddition:h.scrollbase.postSeriesAddition, avgScrollPointWidth:40}, h.mscombidy2d);
		h("scatter", {standaloneInit:!0, defaultSeriesType:"scatter", creditLabel:!0}, h.scatterbase);
		h("bubble", {standaloneInit:!0, standaloneInut:!0, defaultSeriesType:"bubble", point:function (a, c, d, b, g, m, e) {
			if (d.data) {
				var f, k, l, j, i, R, p, Q, s, o, F = !1, q, W, a = h[a], m = d.data, C = m.length, B = n(d.showvalues, g[S].showValues);
				l = n(b.bubblescale, 1);
				var v = r(b.negativecolor, "FF0000"), u = g.plotOptions.bubble, D = this.numberFormatter, w = n(d.showregressionline, b.showregressionline, 0);
				u.bubbleScale = l;
				c.name = Z(d.seriesname);
				if (n(d.includeinlegend) === 0 || c.name === void 0) {
					c.showInLegend = !1;
				}
				l = Boolean(n(d.drawanchors, d.showanchors, b.drawanchors, 1));
				p = r(d.plotfillalpha, d.bubblefillalpha, b.plotfillalpha, ba);
				Q = n(d.showplotborder, b.showplotborder, 1);
				s = M(r(d.plotbordercolor, b.plotbordercolor, "666666"));
				f = r(d.plotborderthickness, b.plotborderthickness, 1);
				o = r(d.plotborderalpha, b.plotborderalpha, "95");
				Q = Q == 1 ? f : 0;
				e = r(d.color, d.plotfillcolor, b.plotfillcolor, g.colors[e % g.colors.length]);
				c.marker = {enabled:l, fillColor:this.getPointColor(e, ba), lineColor:{FCcolor:{color:s, alpha:o}}, lineWidth:Q, symbol:"circle"};
				if (w) {
					c.events = {hide:this.hideRLine, show:this.showRLine};
					var H = {sumX:0, sumY:0, sumXY:0, sumXsqure:0, sumYsqure:0, xValues:[], yValues:[]}, t = n(d.showyonx, b.showyonx, 1), I = M(r(d.regressionlinecolor, b.regressionlinecolor, e)), x = n(d.regressionlinethickness, b.regressionlinethickness, 1);
					f = wa(n(d.regressionlinealpha, b.regressionlinealpha, 100));
					I = X(I, f);
				}
				for (k = 0; k < C; k += 1) {
					if (j = m[k]) {
						if (f = D.getCleanValue(j.y), q = D.getCleanValue(j.x), W = D.getCleanValue(j.z, !0), f === null) {
							c.data.push({y:null, x:q});
						} else {
							F = !0;
							i = M(r(j.color, j.z < 0 ? v : e));
							R = r(j.alpha, p);
							j = a.getPointStub(j, f, q, g, d, B);
							i = n(b.use3dlighting) === 0 ? i : a.getPointColor(i, R);
							if (W !== null) {
								u.zMax = u.zMax > W ? u.zMax : W, u.zMin = u.zMin < W ? u.zMin : W;
							}
							c.data.push({y:f, x:q, z:W, displayValue:j.displayValue, toolText:j.toolText, link:j.link, marker:{enabled:l, fillColor:i, lineColor:{FCcolor:{color:s, alpha:o}}, lineWidth:Q, symbol:"circle"}});
							this.pointValueWatcher(g, f, q, w && H);
						}
					} else {
						c.data.push({y:null});
					}
				}
				w && (d = {type:"line", color:I, showInLegend:!1, lineWidth:x, enableMouseTracking:!1, marker:{enabled:!1}, data:this.getRegressionLineSeries(H, t, C), zIndex:0}, c = [c, d]);
			}
			if (!F) {
				c.showInLegend = !1;
			}
			return c;
		}, postSeriesAddition:function (a, c) {
			a.chart.hasScroll = n(c.chart.clipbubbles, 1);
		}, getPointStub:function (a, c, d, b, g, m) {
			var b = b[S], c = c === null ? c : b.numberFormatter.dataLabels(c), e, f = b.tooltipSepChar;
			b.showTooltip ? Z(a.tooltext) !== void 0 ? g = ja(a.tooltext) : c === null ? g = !1 : (b.seriesNameInToolTip && (e = r(g && g.seriesname)), g = e ? e + f : J, g += d ? d + f : J, g += c, g += a.z ? f + a.z : J) : g = J;
			d = n(a.showvalue, m, b.showValues) ? r(a.name, a.label) !== void 0 ? ja(r(a.name, a.label)) : c : J;
			a = Z(a.link);
			return {displayValue:d, toolText:g, link:a};
		}}, h.scatter);
		var Pa = function (a, c, d, b) {
			var u;
			var g = a.stepZoom, m = a.options.chart.stepZoom.skipOverlapPoints, e = g.zoomHistory, f = g.currentZoomLevelIndex, k, l = g.pixelsPerPoint, j = a.series, i = j.length, R = g.maxIndex, p, h, s, o;
			h = a.options._FCconf.visibleLabelDistance;
			var n;
			if (b < f) {
				f = g.currentZoomLevelIndex = b || 0, e.splice(f + 1, e.length), e = e[f], l = e.stepping, a = e.seriesStart, d = e.perPointPixelDistance, b = e.scrollRatio, c = g.scrollPosition = e.scrollPosition, g.scrollablePXLength = e.scrollablePXLength;
			} else {
				c > d && (n = c, c = d, d = n);
				k = a.plotWidth;
				a = d - c;
				d = k / a;
				n = d < h ? Math.ceil(h / d) : 1;
				l = d < l ? Math.ceil(l / d) : 1;
				d = k / (a - a % l);
				a = c % l;
				p = R - R % l;
				s = (p - a) * d;
				b = k / s;
				o = s - k;
				c = o > 0 ? (c - a) * d / (s - k) : 0;
				g.scrollPosition = c;
				g.scrollablePXLength = o;
				if ((k = e[f]) && k.stepping === l && k.seriesStart === a && k.seriesEnd === p && k.perPointPixelDistance === d) {
					return;
				}
				e[g.currentZoomLevelIndex = f += 1] = {seriesStart:a, seriesEnd:p, stepping:l, perPointPixelDistance:d, visiblePointDistance:l * d, seriesConf:[], scrollRatio:b, scrollPosition:c, scrollablePXLength:o};
			}
			var e = [], q, r;
			n === void 0 && (n = d < h ? Math.ceil(h / d) : 1);
			for (f = 0; f <= R; f += 1) {
				p = f - a;
				h = p * d;
				o = h + g.xDisplacement;
				k = p < 0 || p % l !== 0;
				s = (p = p < 0 || p % n !== 0) ? "hide" : "show";
				p = k ? "hide" : "show";
				if (q = g.catLabelArr[f]) {
					q[s](), q.attr({x:o});
				}
				for (o = 0; o < i; o += 1) {
					if (q = j[o], s = q.data[f], s.plotX = h, u = e[o] || (e[o] = {path:[], addMove:!0, addLine:!1, lastMovePoint:[], connectNullData:q.options.connectNullData}), q = u, r = q.path, s.graphic && (s.graphic.attr({x:h}), s.graphic[p]()), s.dataLabel && s.dataLabel.attr && (s.dataLabel.attr({x:h}), s.dataLabel[p]()), s.tracker && s.tracker.attr && (s.tracker.attr({x:h}), s.tracker[p]()), !m || !k) {
						if (qa(s && s.plotY)) {
							if (q.addLine) {
								r.push(G, q.lastMovePoint[0], q.lastMovePoint[1], N), q.addLine = !1;
							}
							q.addMove ? (q.addLine = !0, q.addMove = !1, q.lastMovePoint[0] = h, q.lastMovePoint[1] = s.plotY) : r.push(h, s.plotY);
						} else {
							if (!q.connectNullData) {
								q.addMove = !0, q.addLine = !1;
							}
						}
					}
				}
			}
			for (o = 0; o < i; o += 1) {
				q = e[o] || (e[o] = {path:[G], isLastMoveComand:!0}), r = q.path, j[o].graphLine.attr({d:r}), j[o].graphPath = r;
			}
			g.scroller.setScrollRatio(b);
			g.scroller.setScrollPosition(c);
		}, pb = function (a, c) {
			var d = c.zoomHistory[c.currentZoomLevelIndex], b = d.perPointPixelDistance, g = a.selectionWidth, m = c.maxIndex, d = d.scrollablePXLength * d.scrollPosition + a.selectionLeft, g = d + g, d = Math.floor(d / b), g = Math.ceil(g / b);
			g > m && (g = m);
			return {max:g, min:d};
		}, qb = function (a, c) {
			var d = this.tracker.normalizeMouseEvent, b = this.options.chart.stepZoom, g = this.renderer, m = this.plotLeft, e = this.plotTop, f = this.plotWidth, k = this.plotHeight, l = b.pinPaneBorderThickness, j = g.clipRect(m + a, e, c, k), i, R, p = [], h = 0;
			i = g.g("group").attr({x:0, y:0, zIndex:2}).clip(j).add();
			R = g.rect(m + a, e - l / 2, c, k + l, 0).attr({stroke:b.pinPaneBorderColor, fill:b.pinPaneBgColor, strokeWidth:l}).css({cursor:"w-resize"}).add(i);
			ia(this.series, function (a) {
				var d = a.options, c = d.color, d = ka(d.lineWidth + b.pinLineThicknessDelta, 1), c = g.path(a.graphPath).attr({stroke:c, "stroke-width":d, "stroke-linecap":"round", dashstyle:Sa && !ea ? pa(d + 1, d, d) : pa(d, d + 1, d), visibility:a.visible ? ma : "hidden"});
				p.push(c);
				c.translate(a.group.attr("translateX"), e).add(i);
			});
			va(R.element, "dragstart drag", function (b) {
				b = d(b);
				if (b.type === "dragstart") {
					h = b.pageX - (i.attr("translateX") || 0);
				} else {
					var b = b.pageX - h, e = b + a;
					e < 0 ? b = -a : e + c > f && (b = f - c - a);
					i.translate(b);
				}
			});
			return {destroy:function () {
				ia(p, function (a) {
					a.destroy();
				});
				R.destroy();
				i.destroy();
			}};
		}, rb = function (a) {
			var c = this, d = c.stepZoom, b = c.options.chart.stepZoom, g = a.selectionLeft, m = pb(a, d);
			if (d.pinActive) {
				d.pinComposite && d.pinComposite.destroy(), d.pinComposite = qb.call(c, g, a.selectionWidth, m, d);
			} else {
				m.max > m.min && Pa(c, m.min, m.max);
				a = d.currentZoomLevelIndex;
				if (!d.zoButton) {
					d.zoButton = c.addButton({onclick:function () {
						var a = d.currentZoomLevelIndex - 1;
						Pa(c, void 0, void 0, a);
						d.pinComposite && (d.pinComposite = d.pinComposite.destroy());
						d.pinButton && d.pinButton.activate(!1);
						d.pinActive = !1;
						a <= 1 && d.resetButton.hide();
						d.currentZoomLevelIndex == 0 && d.zoButton.hide();
					}, tooltip:b.showToolBarButtonTooltext && b.btnZoomOutTooltext, symbol:"zoomOutIcon"});
				}
				d.zoButton[a === 0 ? "hide" : "show"]();
				if (!d.resetButton) {
					d.resetButton = c.addButton({onclick:function () {
						Pa(c, void 0, void 0, 0);
						d.resetButton && d.resetButton.hide();
						d.zoButton && d.zoButton.hide();
						d.pinComposite && (d.pinComposite = d.pinComposite.destroy());
						d.pinButton && d.pinButton.activate(!1);
						d.pinActive = !1;
					}, tooltip:b.showToolBarButtonTooltext && b.btnResetChartTooltext, symbol:"resetIcon", symbolFill:"none", hoverSymbolFill:"none"});
				}
				d.resetButton[c.stepZoom.currentZoomLevelIndex > 1 ? "show" : "hide"]();
			}
		};
		h("zoomline", {standaloneInit:!0, hasVDivLine:!0, defaultSeriesType:"stepzoom", canvasborderthickness:1, chart:function () {
			var a = this.dataObj.chart, c = this.base.chart.apply(this, arguments), d = c.chart.stepZoom;
			!Z(a.caption) && !Z(a.subcaption) && (c.chart.marginTop += 15);
			c.chart.animation = !1;
			(c.plotOptions || (c.plotOptions = {})) && (c.plotOptions.series || (c.plotOptions.series = {}));
			c.plotOptions.series.animation = !1;
			c.chart.nativeZoom = !1;
			c.chart.events.selection = rb;
			if (!c.callbacks) {
				c.callbacks = [];
			}
			c.callbacks.push(function () {
				var a = this.stepZoom, c = a.pinButton;
				if (!c && this.options.chart.stepZoom.allowPinMode) {
					c = a.pinButton = this.addButton({onclick:function () {
						if (a.pinActive = !a.pinActive) {
							c.tooltipOptions.point.toolText = d.showToolBarButtonTooltext && "Switch to Zoom Mode";
						} else {
							if (a.pinComposite) {
								a.pinComposite = a.pinComposite.destroy();
							}
							c.tooltipOptions.point.toolText = d.showToolBarButtonTooltext && d.btnSwitchToPinModeTooltext;
						}
						c.activate(a.pinActive);
					}, tooltip:d.showToolBarButtonTooltext && d.btnSwitchToPinModeTooltext, symbol:"pinModeIcon"});
				}
			});
			return c;
		}, xAxisMinMaxSetter:function (a) {
			this.base.xAxisMinMaxSetter.apply(this, arguments);
			var c = a.xAxis, d = a[S].x;
			c.min = 0;
			c.max = d.catCount - 1;
		}, series:function (a, c, d) {
			var b, g, m = c[S], e;
			b = a.chart;
			n(b.compactdatamode, 0);
			c.legend.enabled = Boolean(n(b.showlegend, 1));
			c.chart.valuePosition = r(b.valueposition, "auto").toLowerCase();
			if (a.dataset && a.dataset.length > 0) {
				a.categories && a.categories[0] && a.categories[0].category && this.categoryAdder(a, c);
				b = 0;
				for (g = a.dataset.length; b < g; b += 1) {
					if (a.dataset[b].data) {
						e = {data:[]}, e = this.point(d, e, a.dataset[b], a.chart, c, m.oriCatTmp.length, b), e instanceof Array ? c.series = c.series.concat(e) : c.series.push(e), e = !0;
					}
				}
				e && (this.configureAxis(c, a), a.trendlines && !this.isLog && Fa(a.trendlines, c.yAxis, m, !1, this.isBar));
			}
		}, point:function (a, c, d, b, g, m, e) {
			var f, k, l, j, i, R, p, h, s, o, F, q, W, C, B, v, u, D, w = d.data, H = g[S], a = r(c.type, this.defaultSeriesType), t = g.plotOptions[a] && g.plotOptions[a].stacking, I = r(this.isValueAbs, H.isValueAbs, !1);
			n(d.showvalues, H.showValues);
			var H = n(c.yAxis, 0), x = this.numberFormatter;
			D = n(b.showshadow, 1);
			h = n(b.compactdatamode, 0);
			u = r(b.dataseparator, "|");
			f = r(d.seriesname, J);
			k = M(r(d.color, b.linecolor, g.colors[e % g.colors.length]));
			l = r(d.alpha, b.linealpha, ba);
			j = n(d.linethickness, b.linethickness, 2);
			i = Boolean(n(d.dashed, b.linedashed, 0));
			R = n(d.linedashlen, b.linedashlen, 5);
			p = n(d.linedashgap, b.linedashgap, 4);
			n(d.includeinlegend, 1);
			e = n(d.showvalues, b.showvalues);
			s = n(d.drawanchors, d.showanchors, b.drawanchors, b.showanchors);
			o = n(d.anchorsides, b.anchorsides, 0);
			F = n(d.anchorradius, b.anchorradius, 3);
			q = M(r(d.anchorbordercolor, b.anchorbordercolor, k));
			W = n(d.anchorborderthickness, b.anchorborderthickness, 1);
			C = M(r(d.anchorbgcolor, b.anchorbgcolor, k));
			B = r(d.anchoralpha, b.anchoralpha, ba);
			b = r(d.anchorbgalpha, b.anchorbgalpha, B);
			c.marker = {enabled:s === void 0 ? l != 0 : !!s, fillColor:{FCcolor:{color:C, alpha:b * B / 100 + J}}, lineColor:{FCcolor:{color:q, alpha:B + J}}, lineWidth:W, radius:F, symbol:Xa(o)};
			c.name = f;
			c.color = {FCcolor:{color:k, alpha:l}};
			c.shadow = {opacity:D ? l / 100 : 0};
			c.lineWidth = j;
			c.dashStyle = i ? pa(R, p, j) : void 0;
			if (n(d.includeinlegend) === 0 || c.name === void 0 || l == 0 && s !== 1) {
				c.showInLegend = !1;
			}
			if (w) {
				if (h) {
					w = w.split(u);
					for (d = 0; d < m; d += 1) {
						f = x.getCleanValue(w[d]), f === null ? c.data.push({y:null}) : (v = !0, h = x.dataLabels(f), j = e ? h : J, c.data.push({y:f, displayValue:j, toolText:h}), this.pointValueWatcher(g, f, H, t, d, 0, a));
					}
				} else {
					for (d = 0; d < m; d += 1) {
						(h = w[d]) ? (f = x.getCleanValue(h.value, I), f === null ? c.data.push({y:null}) : (v = !0, n(h.anchorsides, o), n(h.anchorradius, F), M(r(h.anchorbordercolor, q)), n(h.anchorborderthickness, W), M(r(h.anchorbgcolor, C)), r(h.anchoralpha, B), r(h.anchorbgalpha, b), u = M(r(h.color, k)), D = r(h.alpha, l), h = Z(h.tooltext, x.dataLabels(f)), j = e ? h : J, c.data.push({displayValue:j, toolText:h, y:f, color:{FCcolor:{color:u, alpha:D}}}), this.pointValueWatcher(g, f, H, t, d, 0, a))) : c.data.push({y:null});
					}
				}
			}
			if (!v) {
				c.showInLegend = !1;
			}
			return c;
		}, categoryAdder:function (a, c) {
			var d, b = 0, g, m = c[S], e = m.axisGridManager, f = c.xAxis, k, l = m.x, j = a.chart, i = c.chart, h = n(j.showlabels, 1);
			i.zoomType = "x";
			f.maxZoom = 2;
			g = n(j.pixelsperpoint, 15);
			g <= 0 && (g = 15);
			m.pixelsperpoint = g;
			if (a.categories && a.categories[0] && a.categories[0].category) {
				if (a.categories[0].font) {
					c.xAxis.labels.style.fontFamily = a.categories[0].font;
				}
				if ((g = n(a.categories[0].fontsize)) !== void 0) {
					g < 1 && (g = 1), c.xAxis.labels.style.fontSize = g + Oa, La(c.xAxis.labels.style);
				}
				if (a.categories[0].fontcolor) {
					c.xAxis.labels.style.color = a.categories[0].fontcolor.split(y)[0].replace(/^\#?/, "#");
				}
				g = c[S].oriCatTmp;
				var p = a.categories[0].category;
				d = n(j.compactdatamode, 0);
				k = r(j.dataseparator, "|");
				if (d) {
					e = p.split(k);
					for (d = 0; d < e.length; d += 1) {
						k = ja(oa(e[d], e[d].name)), g[b] = k, b += 1;
					}
				} else {
					for (d = 0; d < p.length; d += 1) {
						p[d].vline ? e.addVline(f, p[d], b) : (k = p[d].showlabel === "0" ? J : ja(oa(a.categories[0].category[d].label, a.categories[0].category[d].name)), g[b] = oa(ja(a.categories[0].category[d].tooltext), k), b += 1);
					}
				}
				if (h) {
					f.categories = g;
				}
			}
			f = b - 1 || 1;
			m.displayStartIndex = n(j.displaystartindex, 0);
			m.displayEndIndex = n(j.displayendindex, f);
			if (m.displayStartIndex < 0 || m.displayStartIndex >= f) {
				m.displayStartIndex = 0;
			}
			if (m.displayEndIndex <= m.displayStartIndex || m.displayEndIndex > f) {
				m.displayEndIndex = f;
			}
			l.catCount = b;
			i.hasScroll = !0;
			b = i.stepZoom = {};
			b.pixelsperpoint = m.pixelsperpoint;
			b.displayStartIndex = m.displayStartIndex;
			b.displayEndIndex = m.displayEndIndex;
			b.scrollColor = M(r(j.scrollcolor, Y.altHGridColor[c.chart.paletteIndex]));
			b.scrollHeight = n(j.scrollheight, 16);
			b.scrollPadding = n(j.scrollpadding, c.chart.plotBorderWidth);
			b.scrollBtnWidth = n(j.scrollbtnwidth, j.scrollheight, 16);
			b.scrollBtnPadding = n(j.scrollbtnpadding, 0);
			m.marginBottomExtraSpace += b.scrollPadding + b.scrollHeight;
		}, postSeriesAddition:function (a, c) {
			var d = c.chart, b = a.chart.stepZoom, g = Y.canvasBorderColor[this.paletteIndex];
			if (b) {
				b.allowPinMode = n(d.allowpinmode, 1), b.skipOverlapPoints = !!n(d.skipoverlappoints, 1), b.showToolBarButtonTooltext = n(d.showtoolbarbuttontooltext, 1), b.btnResetChartTooltext = r(d.btnresetcharttooltext, "Reset Zoom"), b.btnZoomOutTooltext = r(d.btnzoomouttooltext, "Zoom out one level"), b.btnSwitchToZoomModeTooltext = r(d.btnswitchtozoommodetooltext, "Select a subset of data to zoom into it for detailed view"), b.btnSwitchToPinModeTooltext = r(d.btnswitchtopinmodetooltext, "Switch to Pin Mode"), b.pinLineThicknessDelta = n(d.pinlinethicknessdelta, 0), b.pinPaneBorderThickness = n(d.pinpaneborderthickness, 1), b.pinPaneBorderColor = X(r(d.pinpanebordercolor, g), n(d.pinpaneborderalpha, 15)), b.pinPaneBgColor = X(r(d.pinpanebgcolor, g), n(d.pinpanebgalpha, 15));
			}
		}, placeHorizontalAxis:function (a, c, d, b, g, m, e) {
			var f = d[S], k, l, j, i, h, p, r, s, o = 0, F = 0, q = 10, W = 1, C = 0, B = 0, v = !1, u = !1, D = !1;
			j = n(b.chart.labelstep, 0);
			s = c.labelDisplay;
			var w = c.rotateLabels, H = c.horizontalLabelPadding, t = f.marginBottomExtraSpace, I = d.chart.marginLeft;
			k = d.chart.marginRight;
			var x = f.smartLabel, y = c.slantLabels, E = g / (a.max - a.min), A = 0, G = 0, B = {w:0, h:0};
			if (a.labels.style) {
				h = a.labels.style, x.setStyle(h), l = x.getOriSize("W"), q = l.height, p = l.width + 4, r = x.getOriSize("WWW").width + 4;
			}
			var N, z, O = [], K = [];
			l = l = 0;
			var P, L, T = c.horizontalAxisNamePadding;
			z = 0;
			var c = c.staggerLines, M = A;
			if (a.title && a.title.text != J) {
				h = a.title.style, x.setStyle(h), C = x.getOriSize("W").height, a.title.rotation = 0, l = x.getSmartText(a.title.text, g, m), F = l.height;
			}
			parseInt(b.chart.chartleftmargin, 10);
			parseInt(b.chart.chartrightmargin, 10);
			z = g - e;
			switch (s) {
			  case "none":
				v = D = !0;
				w && (o = y ? 300 : 270, l = q, q = p, p = l, v = !0);
				break;
			  case "rotate":
				o = y ? 300 : 270;
				l = q;
				q = p;
				p = l;
				v = !0;
				break;
			  case "stagger":
				u = v = !0;
				b = Math.floor((m - C) / q);
				b < c && (c = b);
				break;
			  default:
				w && (o = y ? 300 : 270, l = q, q = p, p = l);
			}
			w = 0;
			e = a.plotLines;
			for (b = e.length; w < b; w += 1) {
				(l = e[w]) && l.label && typeof l.label.text !== Za && K.push(l);
			}
			e = a.plotBands;
			w = 0;
			for (b = e.length; w < b; w += 1) {
				(l = e[w]) && l.label && typeof l.label.text !== Za && K.push(l);
			}
			e = a.categories || [];
			w = 0;
			for (b = e.length; w < b; w += 1) {
				O.push({value:w, label:{text:e[w]}});
			}
			w = O.length - 1;
			b = O.length;
			u && (c > b ? c = b : c < 2 && (c = 2));
			if (b) {
				a.scroll && a.scroll.viewPortMin && a.scroll.viewPortMax ? (N = a.scroll.viewPortMin, l = a.scroll.viewPortMax) : (N = a.min, l = a.max);
				P = f.width * 0.08;
				L = (O[0].value - N) * E;
				N = (l - O[w].value) * E;
				f.maxLabelWidth = P;
				f.visibleLabelDistance = f.width * 0.1;
				if (s === "auto") {
					if (P > E && P < r) {
						y ? o = 300 : (o = 270, f.visibleLabelDistance = f.width * 0.07, f.maxLabelWidth = q), l = q, q = p, p = l, v = !0;
					}
				} else {
					if (s === "rotate") {
						if (!y) {
							f.visibleLabelDistance = f.width * 0.07, f.maxLabelWidth = q;
						}
					} else {
						s === "stagger" && (P *= c);
					}
				}
				r = (L + I) * 2;
				if (s = e[0]) {
					a.labels.style && x.setStyle(a.labels.style), s = Math.min(P, x.getOriSize(s).width + 4), s > r && (l = (s - r) / 2, g -= l, z -= l, d.chart.marginLeft += l);
				}
				r = (N + k) * 2;
				if (s = e[w]) {
					a.labels.style && x.setStyle(a.labels.style), s = Math.min(P, x.getOriSize(i).width + 4), s > r && (l = (s - r) / 2, g -= l, z -= l, d.chart.marginRight += l);
				}
				D || (j ? (P *= j, P = Math.max(P, p)) : (W = Math.ceil(p / P), P *= W));
				for (j = 0; j < b; j += 1) {
					if (l = O[j], j % W && l.label) {
						l.label.text = J;
					} else {
						if (l && l.label && Z(l.label.text) !== void 0) {
							i = l.label;
							if (i.style && i.style !== h) {
								h = i.style, x.setStyle(h);
							}
							if (o && D) {
								k = x.getOriSize(i.text), B.w = ka(B.w, k.width + 4), B.h = ka(B.h, k.height);
							} else {
								if (!D) {
									k = o || u ? x.getOriSize(i.text) : x.getSmartText(i.text, P - 4, m, v), B.w = Math.max(B.w, k.width + 4), B.h = Math.max(B.h, k.height);
								}
							}
						}
					}
				}
			}
			j = 0;
			for (b = K.length; j < b; j += 1) {
				if ((l = K[j]) && l.label && Z(l.label.text) !== void 0) {
					i = l.label;
					if (i.style && i.style !== h) {
						h = i.style, x.setStyle(h);
					}
					k = x.getOriSize(i.text);
					i.verticalAlign === Ea ? A = ka(A, k.height) : G = ka(G, k.height);
				}
			}
			a.scroll && a.scroll.enabled && !o && !D && (i = B.w / 2, d.chart.marginLeft < i && (j = i - d.chart.marginLeft, z > j && (g -= j, z -= j, d.chart.marginLeft += j)), d.chart.marginRight < i && (j = i - d.chart.marginRight, z > j && (g -= j, d.chart.marginRight += j)));
			if (D) {
				if (z = q, o) {
					z = B.w;
				}
			} else {
				z = o ? B.w : u ? c * q : B.h;
			}
			z > 0 && (M += H + z);
			F > 0 && (M += F + T);
			i = G + M + 2;
			i > m && (i -= m, T > i ? (T -= i, i = 0) : (i -= T, T = 0, H > i ? (H -= i, i = 0) : (i -= H, H = 0)), G > i ? G -= i : (G > 0 && (i -= G, G = 0), i > 0 && (A > i ? A -= i : (A > 0 && (i -= A, A = 0), i > 0 && ((l = F - C) > i ? F -= i : (i -= l, F = C, i > 0 && ((l = z - q) > i ? z -= i : (i -= l, z = q, i > 0 && (i -= F + T, F = 0, i > 0 && (i -= z, z = 0, i > 0 && (H -= i)))))))))));
			H += t;
			C = z + H;
			m = f.is3d ? -d.chart.xDepth : 0;
			b = O.length;
			B = 0;
			o ? (q = P, P = z - 4, a.labels.rotation = o, a.labels.align = "right", a.labels.y = H - t + 4, a.labels.x = p / 2) : u ? P = P * c - 4 : (q = z, P -= 4);
			for (j = 0; j < b; j += W) {
				if ((l = O[j]) && l.label && Z(l.label.text) !== void 0) {
					i = l.label;
					if (i.style && i.style !== h) {
						h = i.style, x.setStyle(h);
					}
					if (!D) {
						k = x.getSmartText(i.text, P, q, v), a.categories[j] = k.text;
					}
					B += 1;
				}
			}
			b = K.length;
			for (j = o = p = 0; j < b; j += 1) {
				if ((l = K[j].plotObj ? K[j].plotObj : K[j]) && l.label && Z(l.label.text) !== void 0) {
					i = l.label;
					if (i.style && i.style !== h) {
						h = i.style, x.setStyle(h);
					}
					i.verticalAlign === Ea ? (k = x.getSmartText(i.text, g, A, !0), o = Math.max(o, k.height), i.text = k.text, i.y = C + x.getOriSize("W").height, i.x = m) : (k = x.getSmartText(i.text, g, G, !0), p = Math.max(p, k.height), i.text = k.text, i.y = -(G - x.getOriSize("W").height + H + 2));
				}
			}
			if (F > 0) {
				x.setStyle(a.title.style), l = x.getSmartText(a.title.text, g, F), a.title.text = l.text, a.title.margin = C + o + T;
			}
			M = o;
			if (z > 0) {
				f.horizontalAxisHeight = H + z - t, M += f.horizontalAxisHeight;
			}
			F > 0 && (M += F + T);
			d.chart.marginBottom += M;
			p > 0 && (d.chart.marginTop += p, M += p);
			return M;
		}, creditLabel:!0, defaultPlotShadow:1}, h.msline);
		h("ssgrid", {standaloneInit:!0, defaultSeriesType:"ssgrid", chart:function () {
			var a = this.containerElement, c = this.dataObj, d = this.chartInstance, c = Ga({}, c);
			c.chart = c.chart || c.graph || {};
			delete c.graph;
			var b, g, m, e = 0, f, k, l = [], j = c.chart, i = c.data, h = i && i.length, c = this.smartLabel, p = this.numberFormatter, Q = a.offsetHeight, s = a.offsetWidth, o = {}, F = e = 0, e = (j.palette > 0 && j.palette < 6 ? j.palette : n(this.paletteIndex, 1)) - 1, a = {chart:{renderTo:a, ignoreHiddenSeries:!1, events:{}, spacingTop:0, spacingRight:0, spacingBottom:0, spacingLeft:0, marginTop:0, marginRight:0, marginBottom:0, marginLeft:0, borderRadius:0, borderColor:"#000000", borderWidth:1, defaultSeriesType:"ssgrid", style:{fontFamily:r(j.basefont, "Verdana"), fontSize:Wa(j.basefontsize, 20) + Oa, color:r(j.basefontcolor, Y.baseFontColor[e]).replace(/^#?([a-f0-9]+)/ig, "#$1")}, plotBackgroundColor:Ma}, labels:{smartLabel:c}, colors:["AFD8F8", "F6BD0F", "8BBA00", "FF8E46", "008E8E", "D64646", "8E468E", "588526", "B3AA00", "008ED6", "9D080D", "A186BE", "CC6600", "FDC689", "ABA000", "F26D7D", "FFF200", "0054A6", "F7941C", "CC3300", "006600", "663300", "6DCFF6"], credits:{href:"http://www.fusioncharts.com?BS=FCHSEvalMark", text:"FusionCharts", enabled:this.creditLabel}, legend:{enabled:!1}, series:[], subtitle:{text:J}, title:{text:J}, tooltip:{enabled:!1}, exporting:{buttons:{exportButton:{}, printButton:{enabled:!1}}}}, q = a.colors, t = a.colors.length, C = 0, B = f = g = 0, F = b = k = 0;
			g = d.jsVars.cfgStore;
			d = a.chart;
			La(a.chart.style);
			o.showPercentValues = n(g.showpercentvalues, j.showpercentvalues, 0);
			o.numberItemsPerPage = r(g.numberitemsperpage, j.numberitemsperpage);
			o.showShadow = n(g.showshadow, j.showshadow, 0);
			o.baseFont = r(g.basefont, j.basefont, "Verdana");
			m = Wa(g.basefontsize, j.basefontsize, 10);
			o.baseFontSize = m + Oa;
			o.baseFontColor = M(r(g.basefontcolor, j.basefontcolor, Y.baseFontColor[e]));
			o.alternateRowBgColor = M(r(g.alternaterowbgcolor, j.alternaterowbgcolor, Y.altHGridColor[e]));
			o.alternateRowBgAlpha = r(g.alternaterowbgalpha, j.alternaterowbgalpha, Y.altHGridAlpha[e]) + J;
			o.listRowDividerThickness = n(g.listrowdividerthickness, j.listrowdividerthickness, 1);
			o.listRowDividerColor = M(r(g.listrowdividercolor, j.listrowdividercolor, Y.borderColor[e]));
			o.listRowDividerAlpha = n(g.listrowdivideralpha, j.listrowdivideralpha, Y.altHGridAlpha[e]) + 15 + J;
			o.colorBoxWidth = n(g.colorboxwidth, j.colorboxwidth, 8);
			o.colorBoxHeight = n(g.colorboxheight, j.colorboxheight, 8);
			o.navButtonRadius = n(g.navbuttonradius, j.navbuttonradius, 7);
			o.navButtonColor = M(r(g.navbuttoncolor, j.navbuttoncolor, Y.canvasBorderColor[e]));
			o.navButtonHoverColor = M(r(g.navbuttonhovercolor, j.navbuttonhovercolor, Y.altHGridColor[e]));
			o.textVerticalPadding = n(g.textverticalpadding, j.textverticalpadding, 3);
			o.navButtonPadding = n(g.navbuttonpadding, j.navbuttonpadding, 5);
			o.colorBoxPadding = n(g.colorboxpadding, j.colorboxpadding, 10);
			o.valueColumnPadding = n(g.valuecolumnpadding, j.valuecolumnpadding, 10);
			o.nameColumnPadding = n(g.namecolumnpadding, j.namecolumnpadding, 5);
			o.borderThickness = n(g.borderthickness, j.borderthickness, 1);
			o.borderColor = M(r(g.bordercolor, j.bordercolor, Y.borderColor[e]));
			o.borderAlpha = r(g.borderalpha, j.borderalpha, Y.borderAlpha[e]) + J;
			o.bgColor = r(g.bgcolor, j.bgcolor, "FFFFFF");
			o.bgAlpha = r(g.bgalpha, j.bgalpha, ba);
			o.bgRatio = r(g.bgratio, j.bgratio, ba);
			o.bgAngle = r(g.bgangle, j.bgangle, ga);
			d.borderRadius = o.borderThickness / 16;
			d.borderWidth = o.borderThickness;
			d.borderColor = {FCcolor:{color:o.borderColor, alpha:o.borderAlpha}};
			d.backgroundColor = {FCcolor:{color:o.bgColor, alpha:o.bgAlpha, ratio:o.bgRatio, angle:o.bgAngle}};
			m = {fontFamily:o.baseFont, fontSize:o.baseFontSize, color:o.baseFontColor};
			La(m);
			c.setStyle(m);
			for (e = 0; e < h; e += 1) {
				if (b = i[e], f = p.getCleanValue(b.value), k = ja(oa(b.label, b.name)), g = M(r(b.color, q[e % t])), r(b.alpha, j.plotfillalpha, ba), k != J || f != null) {
					l.push({value:f, label:k, color:g}), C += f, F += 1;
				}
			}
			for (e = 0; e < F; e += 1) {
				b = l[e], f = b.value, b.dataLabel = b.label, b.displayValue = o.showPercentValues ? p.percentValue(f / C * 100) : p.dataLabels(f), i = c.getOriSize(b.displayValue), B = Math.max(B, i.width + o.valueColumnPadding);
			}
			o.numberItemsPerPage ? o.numberItemsPerPage >= F ? (o.numberItemsPerPage = F, f = Q / o.numberItemsPerPage, g = F) : (p = Q, p -= 2 * (o.navButtonPadding + o.navButtonRadius), g = o.numberItemsPerPage, f = p / g) : (e = parseInt(m.lineHeight, 10), e += 2 * o.textVerticalPadding, e = Math.max(e, o.colorBoxHeight), Q / e >= F ? (f = Q / F, g = F) : (p = Q, p -= 2 * (o.navButtonPadding + o.navButtonRadius), g = Math.floor(p / e), f = p / g));
			k = s - o.colorBoxPadding - o.colorBoxWidth - o.nameColumnPadding - B - o.valueColumnPadding;
			b = o.colorBoxPadding + o.colorBoxWidth + o.nameColumnPadding;
			d.height = Q;
			d.width = s;
			d.rowHeight = f;
			d.labelX = b;
			d.colorBoxWidth = o.colorBoxWidth;
			d.colorBoxHeight = o.colorBoxHeight;
			d.colorBoxX = o.colorBoxPadding;
			d.valueX = o.colorBoxPadding + o.colorBoxWidth + o.nameColumnPadding + k + o.valueColumnPadding;
			d.valueColumnPadding = o.valueColumnPadding;
			d.textStyle = m;
			d.listRowDividerAttr = {"stroke-width":o.listRowDividerThickness, stroke:{FCcolor:{color:o.listRowDividerColor, alpha:o.listRowDividerAlpha}}};
			d.alternateRowColor = {FCcolor:{color:o.alternateRowBgColor, alpha:o.alternateRowBgAlpha}};
			d.navButtonRadius = o.navButtonRadius;
			d.navButtonPadding = o.navButtonPadding;
			d.navButtonColor = o.navButtonColor;
			d.navButtonHoverColor = o.navButtonHoverColor;
			d.lineHeight = parseInt(m.lineHeight, 10);
			Q = [];
			o = 0;
			p = !0;
			for (e = 0; e < F & g != 0; e += 1) {
				e % g == 0 && (Q.push({data:[], visible:p}), p = !1, o += 1), b = l[e], Q[o - 1].data.push({label:c.getSmartText(b.dataLabel, k, f).text, displayValue:b.displayValue, y:b.value, color:b.color});
			}
			a.series = Q;
			a.exporting.enabled = j.exportenabled == "1" ? !0 : !1;
			a.exporting.buttons.exportButton.enabled = j.exportshowmenuitem == "0" ? !1 : !0;
			a.exporting.filename = j.exportfilename ? j.exportfilename : "FusionCharts";
			a.exporting.width = s;
			return a;
		}, creditLabel:!0}, h.base);
		Ba.stepzoom = Ta(Ba.line, {states:{hover:{}}});
		var sb = function (a, c, d) {
			a <= 0.01 && (a = 0);
			var b = this.stepZoom, c = this.series, g = this.plotWidth, m = this.options._FCconf.clipExcessWidth, e = g / 2, f = c.length, a = n(a, b.scrollPosition, 0);
			a *= b.scrollablePXLength;
			var k, l, j, i, h, p = this.plotLeft - a;
			b.catGroup.attr("translateX", p);
			this.trackerGroup.attr("translateX", p);
			b.catClipRect.attr("x", a - m / 2);
			this.clipRect && this.clipRect.attr("x", a);
			for (m = 0; m < f; m += 1) {
				if (k = c[m], k.group && k.group.attr("translateX", p), k.dataLabelsGroup && k.dataLabelsGroup.attr("translateX", p), k.clipRect && k.clipRect.attr("x", a), d) {
					b = fa.min(20, e);
					j = k.data;
					l = j.length;
					for (h = 0; h < l; h += 1) {
						i = j[h], i.y !== null && i.tooltipPos && (k = i.plotX - a, k >= 0 && k <= e ? k += b : k > e && k <= g && (k -= b), i.tooltipPos[0] = k);
					}
				}
			}
		}, t = L.extendClass(na.line, {type:"stepzoom", translate:function () {
			for (var a = this.chart, c = this.options.stacking, d = this.xAxis.categories, b = this.yAxis, g = this.data, m = g.length; m--; ) {
				var e = g[m], f = e.x, k = e.y, l = e.low, j = b.stacks[(k < 0 ? "-" : "") + this.stackKey];
				e.plotX = this.xAxis.translate(f);
				if (c && j && j[f]) {
					var f = j[f], j = f.total, i = b.options.min, l = f.cum;
					f.cum += k;
					k = ka(i, l + k);
					l = ka(i, l);
					c === "percent" && (l = j ? l * 100 / j : 0, k = j ? k * 100 / j : 0);
					e.percentage = j ? e.y * 100 / j : 0;
					e.stackTotal = j;
				}
				if (qa(l)) {
					e.yBottom = b.translate(l, 0, 1, 0, 1);
				}
				if (k !== null) {
					e.plotY = b.translate(k, 0, 1, 0, 1);
				}
				e.clientX = a.inverted ? a.plotHeight - e.plotX : e.plotX;
				e.category = d && d[e.x] !== Ia ? d[e.x] : e.x;
			}
		}, drawPoints:function () {
			var a, c = this.data, d = this.chart, b, g, m, e, f, k, l, j;
			a = d.stepZoom.zoomHistory[d.stepZoom.currentZoomLevelIndex];
			var i = a.perPointPixelDistance, h = a.stepping, p = a.seriesStart, n, s = this.options.marker.enabled;
			for (m = c.length; m--; ) {
				if (e = c[m], n = m - p, b = e.plotX = n * i, g = e.plotY, j = e.graphic, s && g !== Ia && !isNaN(g)) {
					a = e.pointAttr[e.selected ? "select" : ""], l = a.r, f = b + 20, k = g - 15, f = f < 0 ? 0 : f, k = k < 0 ? 0 : k, e.tooltipPos = [f, k], j ? j.animate({x:b, y:g, r:l}) : e.graphic = d.renderer.symbol(za(e.marker && e.marker.symbol, this.symbol), b, g, l).attr(a).add(this.group), (n < 0 || n % h !== 0) && e.graphic.hide();
				}
			}
		}, drawGraph:function () {
			for (var a = this.options, c = this.chart, d = [], b = this.group, g = a.lineColor || this.color, m = a.lineWidth, e = a.dashStyle, f = c.renderer, k = this.data, l = a.connectNullData, j = c.stepZoom.zoomHistory[c.stepZoom.currentZoomLevelIndex], i, h = 0, p = [], n = !0, s, o = (c.options.chart && c.options.chart.stepZoom).skipOverlapPoints ? j.stepping : 1, c = j.seriesStart; c < k.length; c += o, h += j.visiblePointDistance) {
				i = k[c], qa(i && i.plotY) ? (s && (d.push(G, p[0], p[1], N), s = !1), n ? (s = !0, n = !1, p[0] = h, p[1] = i.plotY) : d.push(h, i.plotY)) : l || (n = !0, s = !1);
			}
			this.graphPath = d;
			this.singlePoints = [];
			k = this.graphLine;
			g = {stroke:g, "stroke-width":m, "stroke-linecap":"round", dashstyle:e};
			k ? this.graphLine.animate({d:d}) : this.graphLine = f.path(d).attr(g).add(b).shadow(a.shadow, this.shadowGroup, a.shadow);
		}, drawDataLabels:function () {
			if (this.options.dataLabels.enabled) {
				var a, c, d = this.data, b = this.options.dataLabels, g = this.dataLabelsGroup, m = this.chart, e = m.renderer, f = m.options.chart, k = b.y === null, l = m.plotHeight, j, i = m.stepZoom.zoomHistory[m.stepZoom.currentZoomLevelIndex], h = i.stepping, p = i.seriesStart, r, s = this.type == "floatedcolumn", o = b.style, F = parseInt(o.fontSize, 10), i = m.stepZoom, i = m.plotLeft - i.scrollPosition * i.scrollablePXLength, q = f.valuePadding, t = f.valuePosition, C;
				b.rotation = f.rotateValues == 1 ? 270 : void 0;
				if (!g) {
					g = this.dataLabelsGroup = e.g("data-labels").attr({visibility:this.visible ? ma : "hidden", zIndex:6}).translate(i, m.plotTop).add(), m.options.chart.hasScroll && g.clip(this.clipRect);
				}
				m = b.color;
				m === "auto" && (m = null);
				o.color = za(m, this.color);
				ia(d, function (f, i) {
					r = i - p;
					var m = f.plotX != null ? f.plotX : -999, D = za(f.plotY, -999), w = f.dataLabel, H = b.align, y = (k ? f.y >= 0 ? -6 : 12 : b.y) - q;
					j = b.formatter.call(f.getLabelConfig());
					if (j != null) {
						s && (D = n(f.barY, D));
						a = m + b.x;
						c = D + y;
						switch (t) {
						  case "above":
							c = D + y;
							break;
						  case "below":
							c = D - y + F;
							break;
						  default:
							C = d[i - 1], c = D + ((C && C.plotY) < f.plotY ? -y + F : y);
						}
						c > l && (c = D + y);
						c < F && (c = D - y + F);
						if (w) {
							w.attr({text:j}).animate({x:a, y:c});
						} else {
							if (qa(j)) {
								w = f.dataLabel = e.text(j, a, c).attr({align:H, rotation:b.rotation, zIndex:1}).css(o).add(g);
							}
						}
						(r < 0 || r % h !== 0) && w && w.hide && w.hide();
					}
				});
			}
		}, drawTracker:function () {
			var a = this, c = a.chart, d = +new Date, b, g, m = c.renderer, e, f = c.stepZoom.zoomHistory[c.stepZoom.currentZoomLevelIndex], k = f.stepping, l = f.seriesStart, j;
			c.options.chart.hasScroll && c.trackerGroup.clip(a.clipRect);
			ia(a.data, function (f, h) {
				if (f.y !== null) {
					j = h - l;
					if (f.link !== void 0) {
						var p = {cursor:"pointer", _cursor:"hand"};
					}
					b = f.pointAttr[f.selected ? "select" : ""];
					g = b.r + 3;
					f.tracker = m.circle(f.plotX, f.plotY, g).attr({fill:fb}).on(Ra ? "touchstart" : "mouseover", function (b) {
						e = b.relatedTarget || b.fromElement;
						if (c.hoverSeries !== a && Aa(e, "isTracker") !== d) {
							a.onMouseOver();
						}
						f.onMouseOver();
					}).on("mouseout", function (b) {
						if (!a.options.stickyTracking && (e = b.relatedTarget || b.toElement, Aa(e, "isTracker") !== d)) {
							a.onMouseOut();
						}
					}).css(p).add(c.trackerGroup);
					(j < 0 || j % k !== 0) && f.tracker && f.tracker.hide && f.tracker.hide();
				}
			});
		}, render:function () {
			var a = this, c = a.chart, d = c.renderer, b = c.options.chart, g = c.options._FCconf, m = a.data, e;
			if (!c.stepZoom) {
				var f = m.length - 1, k, l = b.stepZoom, j = n(l.pixelsperpoint, 30), i = n(l.displayStartIndex, 0), h = n(l.displayEndIndex, f), p = c.plotWidth, r = c.plotLeft, s = l.scrollHeight, o = c.plotHeight + c.plotTop + n(l.scrollPadding, 0), F, q, t;
				q = h - i;
				var m = p / q, C, B;
				C = g.maxLabelWidth;
				B = g.visibleLabelDistance;
				B = m < B ? Math.ceil(B / m) : 1;
				F = m < j ? Math.ceil(j / m) : 1;
				m = p / (q - q % F);
				C = g.clipExcessWidth = C;
				g = i % F;
				k = f - f % F || 1;
				q = (k - g) * m;
				t = p / q;
				e = q - p;
				q = e > 0 ? (i - g) * m / (q - p) : 0;
				b = b.plotBorderWidth;
				b = d.scroller(r - b, o, p + b + b, s, !0, {size:l.scrollBtnWidth, padding:l.scrollBtnPadding}, !1).attr({fill:l.scrollColor}).setScrollRatio(t).callback(function (a, b, d) {
					sb.call(c, a, b, d);
				}).add(c.seriesGroup);
				c.stepZoom = {zoomHistory:[{seriesStart:g, seriesEnd:k, stepping:F, perPointPixelDistance:m, visiblePointDistance:F * m, seriesConf:[], scrollRatio:t, scrollPosition:q, scrollablePXLength:e}], currentZoomLevelIndex:0, pixelsPerPoint:j, displayStartIndex:i, displayEndIndex:h, scrollRatio:1, maxIndex:f, scrollPosition:q, scrollablePXLength:e, scroller:b};
				j = a.xAxis;
				f = j.categories;
				l = j.options.labels;
				i = 0;
				j = c.stepZoom;
				F = o + s;
				s = l.align;
				o = l.rotation;
				h = l.style;
				i = n(parseInt(h.lineHeight), 12);
				j.catClipRect = d.clipRect(-(C / 2), 0, p + C, c.chartHeight);
				j.catGroup = d.g("catGroup").translate(r, F).clip(j.catClipRect).add(c.seriesGroup);
				if (f && f.length > 0) {
					p = j.catLabelArr = [];
					C = f.length;
					r = l.y || 0;
					l = l.x || 0;
					j.catLabelClipXDisplacement = -(i / 2);
					j.xDisplacement = l;
					for (i = 0; i < C; i += 1) {
						k = f[i], qa(k) && (F = i - g, e = F * m + l, e = p[i] = d.text(k, e, r).attr({align:s, rotation:o}).css(h).add(j.catGroup), (F < 0 || F % B !== 0) && e.hide());
					}
				}
				b.setScrollPosition(q);
			}
			var v, m = a.options, g = (B = (g = m.animation) && a.animate) ? g && g.duration || 500 : 0, u = a.clipRect;
			q = c.stepZoom;
			q = q.scrollPosition * q.scrollablePXLength;
			p = c.plotLeft - q;
			if (!u && (r = c.plotSizeX, b = c.plotSizeY, u = a.clipRect = !c.hasRendered && c.clipRect ? c.clipRect : d.clipRect(q, 0, r, b), u.cliprectX = q, u.cliprectY = 0, u.cliprectW = r, u.cliprectH = b, !c.clipRect)) {
				c.clipRect = u;
			}
			if (!a.group) {
				v = a.group = d.g("series"), v.clip(a.clipRect).attr({visibility:a.visible ? ma : "hidden", zIndex:m.zIndex}).translate(p, c.plotTop).add(c.seriesGroup);
			}
			B && a.animate(!0);
			a.drawGraph && a.drawGraph();
			a.drawPoints();
			a.drawDataLabels();
			a.options.enableMouseTracking !== !1 && a.drawTracker();
			B && a.animate();
			setTimeout(function () {
				u.isAnimating = !1;
				if ((v = a.group) && u !== c.clipRect && u.renderer) {
					v.clip(a.clipRect = c.clipRect), u.destroy();
				}
			}, g);
			a.isDirty = !1;
		}});
		na.stepzoom = t;
		db(L.Renderer.prototype.symbols, {pinModeIcon:function (a, c, d) {
			c -= 1.5;
			var b = d * 2 / 3, g = a - d, m = a + d, e = a - b, f = a + b, k = a + 0.5, l = k + 1, j = k + 1.5, i = c - d, h = c + b, p = c - b, d = c + (d - b);
			return [G, g, i, N, e, p, e, d, g, h, a - 0.5, h, a, c + c + 0.5, k, h, m, h, f, d, f, p, m, i, j, i, j, p, j, d, l, d, l, p, j, p, j, i, K];
		}, zoomOutIcon:function (a, c, d, b, g) {
			a -= 1;
			c -= 1;
			var m = d - 0.25, b = 43 * ra, e = 48 * ra, d = a + m * ca(b), b = c + m * aa(b), f = a + m * ca(e), e = c + m * aa(e), k = 45 * ra, l = d + 4 * ca(k), j = b + 4 * aa(k), i = f + 4 * ca(k), k = e + 4 * aa(k), g = g.getArcPath(a, c, d, b, f, e, m, m, 0, 1), m = ["M", d, b], m = m.concat(g);
			return m = m.concat("Z", "M", d + 1, b + 1, "L", l, j, i, k, f + 1, e + 1, "Z", "M", a - 2, c, "L", a + 2, c, "Z");
		}, resetIcon:function (a, c, d, b, g) {
			var b = a - d, m = (Da + $) / 2, e = a + d * ca(m), m = c + d * aa(m), f = d * 2 / 3;
			return [G, b, c].concat(g.getArcPath(a, c, b, c, e, m, d, d, 1, 1), [N, e + f, m - 1, e + 2, m + f - 0.5, e, m]);
		}});
		Ba.pie3d = Ta(Ba.pie, {states:{hover:{}}});
		var Qa = function (a, c) {
			return gb(a[1] - (this.pageY || this.originalEvent && this.originalEvent.pageY) + c.top, a[0] - (this.pageX || this.originalEvent && this.originalEvent.pageX) + c.left);
		};
		ya.prototype = {parseColor:function (a, c) {
			var d, b, g, m, e, f = c / 2, k, l, j, i;
			this.use3DLighting ? (d = sa(a, 80), b = sa(a, 75), g = la(a, 85), m = la(a, 70), e = la(a, 40)) : (d = sa(a, 90), b = sa(a, 87), g = la(a, 93), m = la(a, 87), e = la(a, 80));
			k = b + y + g + y + m + y + g + y + b;
			j = c + y + c + y + c + y + c + y + c;
			l = b + y + a + y + g + y + a + y + b;
			i = f + y + f + y + f + y + f + y + f;
			return {frontOuter:{FCcolor:{gradientUnits:"objectBoundingBox", x1:0, y1:0, x2:1, y2:0, color:k, alpha:j, angle:0, ratio:"0,25,5,5,65"}}, backOuter:{FCcolor:{gradientUnits:"objectBoundingBox", x1:0, y1:0, x2:1, y2:0, color:b + y + a + y + e + y + a + y + b, alpha:i, angle:0, ratio:"0,62,8,8,22"}}, frontInner:{FCcolor:{gradientUnits:"objectBoundingBox", x1:0, y1:0, x2:1, y2:0, color:l, alpha:i, angle:0, ratio:"0,25,5,5,65"}}, backInner:{FCcolor:{gradientUnits:"objectBoundingBox", x1:0, y1:0, x2:1, y2:0, color:k, alpha:j, angle:0, ratio:"0,62,8,8,22"}}, top:ea ? {FCcolor:{gradientUnits:"objectBoundingBox", radialGradient:!0, cx:0.3, cy:0.95, r:1, color:m + y + g + y + b, alpha:c + y + c + y + c, ratio:"0,10,90"}} : {FCcolor:{gradientUnits:"objectBoundingBox", color:m + y + m + y + g + y + b, alpha:c + y + c + y + c + y + c, angle:-72, ratio:"0,8,15,77"}}, bottom:X(a, f), startSlice:X(d, c), endSlice:X(d, c)};
		}, rotate:function (a) {
			if (!this.hasOnePoint) {
				for (var c = this.pointElemStore, d = 0, b = c.length, g; d < b; d += 1) {
					g = c[d], g = g._confObject, g.start += a, g.end += a, this.updateSliceConf(g);
				}
				this.refreashDrawing();
			}
		}, refreashDrawing:function () {
			var a = function (a, d) {
				var b = a._conf.index - d._conf.index;
				return b ? b : a._conf.isStart - d._conf.isStart;
			};
			return function () {
				var c = this.slicingWallsArr, d = 0, b, g = c.length, m = null, e = null, f, k = this.slicingWallsFrontGroup.element, l = this.slicingWallsBackGroup.element;
				for (c.sort(a); d < g; d += 1) {
					b = c[d], f = b._conf.index, f < Da ? k.appendChild(b.element) : f < $ ? (k.insertBefore(b.element, m), m = b.element) : f < Va ? (l.insertBefore(b.element, e), e = b.element) : l.appendChild(b.element);
				}
			};
		}(), updateSliceConf:function (a, c) {
			var d = a.start, b = a.end, g = ta(d), m = ta(b), e, f, k, l, j, i, h, p, n, s, o, r, q, t, C, B, v = this.cx, u = this.cy, D = this.rx, w = this.ry, H = D + 2, y = w + 2, I = this.innerRx, x = this.innerRy, J = this.depth, E = this.depthY, A = this.renderer, M = a.elements, L, z, O, V;
			f = ca(g);
			k = aa(g);
			l = ca(m);
			j = aa(m);
			i = v + D * f;
			h = u + w * k;
			p = v + H * f;
			n = u + y * k;
			L = h + J;
			z = v + D * l;
			O = u + w * j;
			s = v + H * l;
			o = u + y * j;
			V = O + J;
			this.isDoughnut ? (e = v + I * f, r = u + x * k, C = r + J, q = v + I * l, t = u + x * j, B = t + J, a.startSlice = [G, i, h, N, i, L, e, C, e, r, K], a.endSlice = [G, z, O, N, z, V, q, B, q, t, K]) : (a.startSlice = [G, i, h, N, i, L, v, E, v, u, K], a.endSlice = [G, z, O, N, z, V, v, E, v, u, K]);
			if (ea) {
				a && a.clipTopPath ? (a.clipTopPath[1] = p, a.clipTopPath[2] = n, a.clipTopPath[9] = s, a.clipTopPath[10] = o) : a.clipTopPath = [G, p, n, da, H, y, 0, 0, 1, s, o, N, this.cx, this.cy, K];
				if (d != b) {
					if (g > m) {
						if (g < $) {
							if (a.clipOuterFrontPath = [G, this.leftX, this.topY, N, i, this.topY, i, this.bottomY, this.leftX, this.bottomY, K, G, z, this.topY, N, this.rightX, this.topY, this.rightX, this.bottomY, z, this.bottomY, K], a.clipOuterBackPath = this.clipPathforOuter, this.isDoughnut) {
								a.clipInnerBackPath = this.clipPathforInner, a.clipInnerFrontPath = [G, this.leftInnerX, this.topY, N, e, this.topY, e, this.bottomY, this.leftInnerX, this.bottomY, K, G, q, this.topY, N, this.rightInnerX, this.topY, this.rightInnerX, this.bottomY, q, this.bottomY, K];
							}
						} else {
							if (m > $) {
								if (a.clipOuterFrontPath = this.clipPathforOuter, a.clipOuterBackPath = [G, this.rightX, this.topY, N, i, this.topY, i, this.bottomY, this.rightX, this.bottomY, K, G, z, this.topY, N, this.leftX, this.topY, this.leftX, this.bottomY, z, this.bottomY, K], this.isDoughnut) {
									a.clipInnerBackPath = [G, this.rightInnerX, this.topY, N, e, this.topY, e, this.bottomY, this.rightInnerX, this.bottomY, K, G, q, this.topY, N, this.leftInnerX, this.topY, this.leftInnerX, this.bottomY, q, this.bottomY, K], a.clipInnerFrontPath = this.clipPathforInner;
								}
							} else {
								if (a.clipOuterFrontPath = [G, this.rightX, this.topY, N, z, this.topY, z, this.bottomY, this.rightX, this.bottomY, K], a.clipOuterBackPath = [G, this.rightX, this.topY, N, i, this.topY, i, this.bottomY, this.rightX, this.bottomY, K], this.isDoughnut) {
									a.clipInnerBackPath = [G, this.rightInnerX, this.topY, N, e, this.topY, e, this.bottomY, this.rightInnerX, this.bottomY, K], a.clipInnerFrontPath = [G, this.rightInnerX, this.topY, N, q, this.topY, q, this.bottomY, this.rightInnerX, this.bottomY, K];
								}
							}
						}
					} else {
						if (g < $) {
							if (m > $) {
								if (a.clipOuterFrontPath = [G, i, this.topY, N, this.leftX, this.topY, this.leftX, this.bottomY, i, this.bottomY, K], a.clipOuterBackPath = [G, z, this.topY, N, this.leftX, this.topY, this.leftX, this.bottomY, z, this.bottomY, K], this.isDoughnut) {
									a.clipInnerBackPath = [G, q, this.topY, N, this.leftInnerX, this.topY, this.leftInnerX, this.bottomY, q, this.bottomY, K], a.clipInnerFrontPath = [G, e, this.topY, N, this.leftInnerX, this.topY, this.leftInnerX, this.bottomY, e, this.bottomY, K];
								}
							} else {
								if (a.clipOuterFrontPath = [G, i, this.topY, N, z, this.topY, z, this.bottomY, i, this.bottomY, K], a.clipOuterBackPath = this.clipPathforNoClip, this.isDoughnut) {
									a.clipInnerBackPath = this.clipPathforNoClip, a.clipInnerFrontPath = [G, e, this.topY, N, q, this.topY, q, this.bottomY, e, this.bottomY, K];
								}
							}
						} else {
							if (a.clipOuterFrontPath = this.clipPathforNoClip, a.clipOuterBackPath = [G, i, this.topY, N, z, this.topY, z, this.bottomY, i, this.bottomY, K], this.isDoughnut) {
								a.clipInnerBackPath = [G, e, this.topY, N, q, this.topY, q, this.bottomY, e, this.bottomY, K], a.clipInnerFrontPath = this.clipPathforNoClip;
							}
						}
					}
					e = m - g;
					e < 0 && (e = ua - e);
					a.clipTopPath[7] = e > $ ? 1 : 0;
				} else {
					a.clipOuterFrontPath = a.clipOuterBackPath = a.clipInnerBackPath = a.clipInnerFrontPath = this.clipPathforNoClip;
				}
				if (!c) {
					a.elements.startSlice._conf.index = g, a.elements.endSlice._conf.index = m, a.clipTop.attr({d:a.clipTopPath}), a.clipOuterFront.attr({d:a.clipOuterFrontPath}), a.clipOuterBack.attr({d:a.clipOuterBackPath}), this.isDoughnut && (a.clipInnerBack.attr({d:a.clipInnerBackPath}), a.clipInnerFront.attr({d:a.clipInnerFrontPath})), this.hasOnePoint ? (a.elements.startSlice.hide(), a.elements.endSlice.hide()) : (a.elements.startSlice.attr({d:a.startSlice}).show(), a.elements.endSlice.attr({d:a.endSlice}).show());
				}
			} else {
				f = this.moveCmdArr;
				k = this.lineCmdArr;
				l = this.closeCmdArr;
				var P = this.centerPoint;
				j = this.leftPoint;
				p = this.topPoint;
				n = this.rightPoint;
				s = this.bottomPoint;
				var S = this.leftDepthPoint, T = this.rightDepthPoint;
				o = this.leftInnerPoint;
				H = this.rightInnerPoint;
				y = this.leftInnerDepthPoint;
				J = this.rightInnerDepthPoint;
				if (d != b) {
					if (g > m ? g < $ ? (d = A.getArcPath(v, u, i, h, this.leftX, u, D, w, 1, 0), b = A.getArcPath(v, u, this.leftX, u, this.rightX, u, D, w, 1, 0), O = A.getArcPath(v, u, this.rightX, u, z, O, D, w, 1, 0), a.outerBackPath = f.concat(j, b, k, T, A.getArcPath(v, E, this.rightX, E, this.leftX, E, D, w, 0, 0), l), a.outerFrontPath = f.concat([i, h], d, k, S, A.getArcPath(v, E, this.leftX, E, i, L, D, w, 0, 0), l, f, n, O, k, [z, V], A.getArcPath(v, E, z, V, this.rightX, E, D, w, 0, 0), l), a.topBorderPath = f.concat([i, h], d, b, O), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, this.rightInnerX, u, I, x, 0, 0), h = A.getArcPath(v, u, this.rightInnerX, u, this.leftInnerX, u, I, x, 0, 0), r = A.getArcPath(v, u, this.leftInnerX, u, e, r, I, x, 0, 0), a.innerBackPath = f.concat(H, h, k, y, A.getArcPath(v, E, this.leftInnerX, E, this.rightInnerX, E, I, x, 1, 0), l), a.innerFrontPath = f.concat(o, r, k, [e, C], A.getArcPath(v, E, e, C, this.leftInnerX, E, I, x, 1, 0), l, f, [q, t], i, k, J, A.getArcPath(v, E, this.rightInnerX, E, q, B, I, x, 1, 0), l), a.topPath = a.topBorderPath.concat(k, [q, t], i, h, r, l), a.topBorderPath = a.topBorderPath.concat(f, [q, t], i, h, r)) : a.topPath = a.topBorderPath.concat(k, P, l)) : m > $ ? (d = A.getArcPath(v, u, i, h, this.rightX, u, D, w, 1, 0), b = A.getArcPath(v, u, this.rightX, u, this.leftX, u, D, w, 1, 0), O = A.getArcPath(v, u, this.leftX, u, z, O, D, w, 1, 0), a.outerFrontPath = f.concat(n, b, k, S, A.getArcPath(v, E, this.leftX, E, this.rightX, E, D, w, 0, 0), l), a.outerBackPath = f.concat([i, h], d, k, T, A.getArcPath(v, E, this.rightX, E, i, L, D, w, 0, 0), l, f, j, O, k, [z, V], A.getArcPath(v, E, z, V, this.leftX, E, D, w, 0, 0), l), a.topBorderPath = f.concat([i, h], d, b, O), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, this.leftInnerX, u, I, x, 0, 0), h = A.getArcPath(v, u, this.leftInnerX, u, this.rightInnerX, u, I, x, 0, 0), r = A.getArcPath(v, u, this.rightInnerX, u, e, r, I, x, 0, 0), a.innerFrontPath = f.concat(o, h, k, J, A.getArcPath(v, E, this.rightInnerX, E, this.leftInnerX, E, I, x, 1, 0), l), a.innerBackPath = f.concat(H, r, k, [e, C], A.getArcPath(v, E, e, C, this.rightInnerX, E, I, x, 1, 0), l, f, [q, t], i, k, y, A.getArcPath(v, E, this.leftInnerX, E, q, B, I, x, 1, 0), l), a.topPath = a.topBorderPath.concat(k, [q, t], i, h, r, l), a.topBorderPath = a.topBorderPath.concat(f, [q, t], i, h, r)) : a.topPath = a.topBorderPath.concat(k, P, l)) : (d = A.getArcPath(v, u, i, h, this.rightX, u, D, w, 1, 0), b = A.getArcPath(v, u, this.rightX, u, z, O, D, w, 1, 0), a.outerFrontPath = f.concat(n, b, k, [z, V], A.getArcPath(v, E, z, V, this.rightX, E, D, w, 0, 0), l), a.outerBackPath = f.concat([i, h], d, k, T, A.getArcPath(v, E, this.rightX, E, i, L, D, w, 0, 0), l), a.topBorderPath = f.concat([i, h], d, b), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, this.rightInnerX, u, I, x, 0, 0), h = A.getArcPath(v, u, this.rightInnerX, u, e, r, I, x, 0, 0), a.innerFrontPath = f.concat([q, t], i, k, J, A.getArcPath(v, E, this.rightInnerX, E, q, B, I, x, 1, 0), l), a.innerBackPath = f.concat(H, h, k, [e, C], A.getArcPath(v, E, e, C, this.rightInnerX, E, I, x, 1, 0), l), a.topPath = a.topBorderPath.concat(k, [q, t], i, h, l), a.topBorderPath = a.topBorderPath.concat(f, [q, t], i, h)) : a.topPath = a.topBorderPath.concat(k, P, l)) : g < $ ? m > $ ? (d = A.getArcPath(v, u, i, h, this.leftX, u, D, w, 1, 0), b = A.getArcPath(v, u, this.leftX, u, z, O, D, w, 1, 0), a.outerBackPath = f.concat(j, b, k, [z, V], A.getArcPath(v, E, z, V, this.leftX, E, D, w, 0, 0), l), a.outerFrontPath = f.concat([i, h], d, k, S, A.getArcPath(v, E, this.leftX, E, i, L, D, w, 0, 0), l), a.topBorderPath = f.concat([i, h], d, b), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, this.leftInnerX, u, I, x, 0, 0), h = A.getArcPath(v, u, this.leftInnerX, u, e, r, I, x, 0, 0), a.innerBackPath = f.concat([q, t], i, k, y, A.getArcPath(v, E, this.leftInnerX, E, q, B, I, x, 1, 0), l), a.innerFrontPath = f.concat(o, h, k, [e, C], A.getArcPath(v, E, e, C, this.leftInnerX, E, I, x, 1, 0), l), a.topPath = a.topBorderPath.concat(k, [q, t], i, h, l), a.topBorderPath = a.topBorderPath.concat(f, [q, t], i, h)) : a.topPath = a.topBorderPath.concat(k, P, l)) : (d = A.getArcPath(v, u, i, h, z, O, D, w, 1, 0), a.outerBackPath = f.concat([i, h]), a.topBorderPath = a.outerBackPath.concat(d), a.outerFrontPath = a.topBorderPath.concat(k, [z, V], A.getArcPath(v, E, z, V, i, L, D, w, 0, 0), l), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, e, r, I, x, 0, 0), a.innerBackPath = f.concat([q, t]), a.topPath = a.topBorderPath.concat(k, [q, t], i, l), a.topBorderPath = a.topBorderPath.concat(f, [q, t], i), a.innerFrontPath = a.innerBackPath.concat(i, k, [e, C], A.getArcPath(v, E, e, C, q, B, I, x, 1, 0), l)) : a.topPath = a.topBorderPath.concat(k, P, l)) : (d = A.getArcPath(v, u, i, h, z, O, D, w, 1, 0), a.outerFrontPath = f.concat([i, h]), a.topBorderPath = a.outerFrontPath.concat(d), a.outerBackPath = a.topBorderPath.concat(k, [z, V], A.getArcPath(v, E, z, V, i, L, D, w, 0, 0), l), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, e, r, I, x, 0, 0), a.innerFrontPath = f.concat([q, t]), a.topPath = a.topBorderPath.concat(k, [q, t], i, l), a.topBorderPath = a.topBorderPath.concat(a.innerFrontPath, i), a.innerBackPath = a.innerFrontPath.concat(i, k, [e, C], A.getArcPath(v, E, e, C, q, B, I, x, 1, 0), l)) : a.topPath = a.topBorderPath.concat(k, P, l)), d = f.concat(j, k, n), i = f.concat(p, k, s), a.topPath = a.topPath.concat(d, i), a.outerFrontPath = a.outerFrontPath.concat(d), a.outerBackPath = a.outerBackPath.concat(d), this.isDoughnut) {
						i = f.concat(o, k, H), a.innerFrontPath = a.innerFrontPath.concat(i), a.innerBackPath = a.innerBackPath.concat(i);
					}
				} else {
					if (a.topPath = a.outerFrontPath = a.outerBackPath = [], this.isDoughnut) {
						a.innerFrontPath = a.innerBackPath = [];
					}
				}
				if (!c) {
					a.elements.startSlice._conf.index = g, a.elements.endSlice._conf.index = m, a.thisElement.attr({d:a.topPath}), M.topBorder.attr({d:a.topBorderPath}), M.bottom.attr({d:a.topPath}), M.bottomBorder.attr({d:a.topBorderPath}), M.frontOuter.attr({d:a.outerFrontPath}), M.backOuter.attr({d:a.outerBackPath}), this.isDoughnut && (M.frontInner.attr({d:a.innerFrontPath}), M.backInner.attr({d:a.innerBackPath})), this.hasOnePoint ? (a.elements.startSlice.hide(), a.elements.endSlice.hide()) : (a.elements.startSlice.attr({d:a.startSlice}).show(), a.elements.endSlice.attr({d:a.endSlice}).show());
				}
			}
		}, createSlice:function () {
			var a = {stroke:!0, strokeWidth:!0, "stroke-width":!0, dashstyle:!0, "stroke-dasharray":!0, translateX:!0, translateY:!0, "stroke-opacity":!0, fill:!0, opacity:!0, isTracker:!0, start:!0, end:!0}, c = function (b, d) {
				var c, g, j = this, i = j._confObject, h, m = i.elements, n, r, o = i.pie3DManager;
				typeof b === "string" && qa(d) && (c = b, b = {}, b[c] = d);
				if (typeof b === "string") {
					j = a[b] ? i[b] : j._attr(b);
				} else {
					for (c in b) {
						if (g = b[c], a[c]) {
							if (i[c] = g, c === "translateX" || c === "translateY" || c === "isTracker") {
								h = {};
								h[c] = g;
								for (n in m) {
									m[n].attr(h);
								}
								j._attr(h);
							} else {
								if (c === "stroke" || c === "strokeWidth" || c === "stroke-width" || c === "dashstyle" || c === "stroke-dasharray") {
									h = {}, h[c] = g, m.topBorder.attr(h), m.startSlice.attr(h), m.endSlice.attr(h), m.bottomBorder.attr(h);
								} else {
									if (c !== "fill" && (c === "start" || c === "end")) {
										r = !0;
									}
								}
							}
						} else {
							j._attr(c, g);
						}
					}
					r && o.updateSliceConf(i);
					o.refreashDrawing();
				}
				return j;
			}, d = function (a, b) {
				var c = this._confObject.elements, d;
				for (d in c) {
					c[d].on(a, b);
				}
				return this._on(a, b);
			}, b = function () {
				var a = this._confObject.elements, b;
				for (b in a) {
					a[b].hide();
				}
				return this._hide();
			}, g = function () {
				var a = this._confObject.elements, b;
				for (b in a) {
					a[b].show();
				}
				return this._show();
			}, h = function () {
				var a = this._confObject, b = a.elements, c;
				for (c in b) {
					b[c].destroy();
				}
				ea && (a.clipTop.destroy(), a.clipOuterFront.destroy(), a.clipOuterBack.destroy(), a.clipInnerFront && a.clipInnerFront.destroy(), a.clipInnerBack && a.clipInnerBack.destroy());
				return this._destroy();
			};
			return function (a, f, k, l, j, i) {
				var n = this.renderer, k = this.parseColor(k, l), f = {start:a, end:f, elements:{}, pie3DManager:this, topPath:this.topPath, topBorderPath:this.topBorderPath, outerFrontPath:this.outerFrontPath, outerBackPath:this.outerBackPath, innerFrontPath:this.innerFrontPath, innerBackPath:this.innerBackPath}, l = this.slicingWallsArr, p = f.elements;
				this.updateSliceConf(f, !0);
				a = n.path(f.topPath).attr({fill:k.top, "stroke-width":0}).add(this.topGroup);
				p.topBorder = n.path(f.topBorderPath).attr({stroke:j, "stroke-width":i}).add(this.topGroup);
				p.bottom = n.path(f.topPath).attr({fill:k.bottom, "stroke-width":0}).add(this.bottomBorderGroup);
				p.bottomBorder = n.path(f.topBorderPath).attr({stroke:j, "stroke-width":i}).add(this.bottomBorderGroup);
				p.frontOuter = n.path(f.outerFrontPath).attr({fill:k.frontOuter, "stroke-width":0}).add(this.outerFrontGroup);
				p.backOuter = n.path(f.outerBackPath).attr({fill:k.backOuter, "stroke-width":0}).add(this.outerBackGroup);
				p.startSlice = n.path(f.startSlice).attr({fill:k.startSlice, stroke:j, "stroke-width":i}).add(this.slicingWallsFrontGroup);
				p.endSlice = n.path(f.endSlice).attr({fill:k.endSlice, stroke:j, "stroke-width":i}).add(this.slicingWallsFrontGroup);
				l.push(p.startSlice, p.endSlice);
				p.startSlice._conf = {index:ta(f.start), isStart:1};
				p.endSlice._conf = {index:ta(f.end), isStart:0};
				this.hasOnePoint && (p.startSlice.hide(), p.endSlice.hide());
				if (this.isDoughnut) {
					p.frontInner = n.path(f.innerFrontPath).attr({fill:k.frontInner, "stroke-width":0}).add(this.innerFrontGroup), p.backInner = n.path(f.innerBackPath).attr({fill:k.backInner, "stroke-width":0}).add(this.innerBackGroup);
				}
				if (ea && (f.clipTop = n.clipPath(f.clipTopPath), f.clipOuterFront = n.clipPath(f.clipOuterFrontPath), f.clipOuterBack = n.clipPath(f.clipOuterBackPath), a.clip(f.clipTop), p.topBorder.clip(f.clipTop), p.bottom.clip(f.clipTop), p.bottomBorder.clip(f.clipTop), p.frontOuter.clip(f.clipOuterFront), p.backOuter.clip(f.clipOuterBack), this.isDoughnut)) {
					f.clipInnerFront = n.clipPath(f.clipInnerFrontPath), f.clipInnerBack = n.clipPath(f.clipInnerBackPath), p.frontInner.clip(f.clipInnerFront), p.backInner.clip(f.clipInnerBack);
				}
				a._confObject = f;
				f.thisElement = a;
				a._destroy = a.destroy;
				a.destroy = h;
				a._show = a.show;
				a.show = g;
				a._hide = a.hide;
				a.hide = b;
				a._on = a.on;
				a.on = d;
				a._attr = a.attr;
				a.attr = c;
				this.pointElemStore.push(a);
				return a;
			};
		}()};
		ya.prototype.constructor = ya;
		L = L.extendClass(na.pie, {type:"pie3d", translate:function () {
			var a = 0, c = this, d = c.options, b = -1 * (r(this.chart.options.chart.startingAngle, 0) % 360 / 360), g = n(d.dataLabels.distance, 20), h = c.slicedOffset = d.slicedOffset, e = Ga([], d.center), f = c.chart, k = f.plotWidth, l = f.plotHeight, j, i, t, p = c.data, y = 2 * Ka, s, o = Ja(k, l), F, q, G, C = d.dataLabels.distance, B = c.pieYScale = d.pieYScale, v = c.pieSliceDepth = d.pieSliceDepth, u = c.managedPieSliceDepth = d.managedPieSliceDepth, D = c.slicedOffsetY = h * B;
			e.push(d.size, d.innerSize || 0);
			e = Ha(e, function (a, b) {
				return (F = /%$/.test(a)) ? [k, l - u, o, o][b] * parseInt(a, 10) / 100 : a;
			});
			e[2] /= 2;
			e[3] /= 2;
			e.push(e[2] * B);
			e.push((e[2] + e[3]) / 2);
			e.push(e[5] * B);
			c.getX = function (a, b) {
				t = fa.asin((a - e[1]) / (e[2] + C));
				return e[0] + (b ? -1 : 1) * ca(t) * (e[2] + C);
			};
			c.center = e;
			ia(p, function (b) {
				a += b.y;
			});
			c.labelsRadius = e[2] + g;
			c.labelsRadiusY = c.labelsRadius * B;
			c.quadrantHeight = (l - u) / 2;
			c.quadrantWidth = k / 2;
			var w = d.dataLabels, g = n(parseInt(w.style.fontSize, 10), 10) + 4;
			c.maxLabels = Math.floor(c.quadrantHeight / g);
			c.labelFontSize = g;
			c.connectorPadding = n(w.connectorPadding, 5);
			c.isSmartLineSlanted = r(w.isSmartLineSlanted, !0);
			c.connectorWidth = n(w.connectorWidth, 1);
			c.enableSmartLabels = w.enableSmartLabels;
			if (!c.pie3DManager) {
				c.pie3DManager = new ya(e[0], e[1], e[2], e[3], B, v, void 0, f.renderer, c.data.length === 1, d.use3DLighting);
			}
			ia(p, function (d) {
				s = a ? d.y / a : 0;
				j = Ca(b * y * 1000) / 1000;
				b += s;
				i = Ca(b * y * 1000) / 1000;
				d.shapeArgs = {start:j, end:i};
				d.centerAngle = t = (i + j) / 2 % ua;
				d.slicedTranslation = Ha([ca(t) * h + f.plotLeft, aa(t) * D + f.plotTop], Ca);
				q = ca(t) * e[2];
				c.radiusY = G = aa(t) * e[4];
				d.tooltipPos = [e[0] + q * 0.7, e[1] + G];
				d.percentage = s * 100;
				d.total = a;
			});
			this.setTooltipPoints();
		}, drawDataLabels:function () {
			var a = function (a, b) {
				return a.point.y - b.point.y;
			}, c = function (a, b) {
				return a.angle - b.angle;
			}, d = ["left", "left", "right", "right"], b = [-1, 1, 1, -1], g = [1, 1, -1, -1];
			return function (h) {
				var e = this.data, f, k, l = this.chart, j = l.options.instanceAPI.smartLabel, i = this.options.dataLabels;
				f = i.style;
				var r = n(parseInt(f.lineHeight, 10), 12), p = i.placeInside, t = i.skipOverlapLabels, s = i.manageLabelOverflow, o = this.connectorPadding, y = this.connectorWidth, q, J = i.distance;
				za(i.softConnector, !0);
				var J = J > 0, C, B = this.center, v = B[1], u = B[0], D = B[2], w = B[4], H = [[], [], [], []], K, I = l.plotLeft, x = l.plotTop, l = l.plotSizeX, M, E, A, L, S, z, O, V, P, Y = this.labelsRadius;
				C = this.labelsRadiusY;
				var T, Z = this.labelFontSize, ha = Z, X = ha / 2, o = [o, o, -o, -o], ba = this.maxLabels, ea = this.isSmartLineSlanted, ga = this.enableSmartLabels, U, da = this.pieSliceDepth / 2;
				h || (cb.prototype.drawDataLabels.apply(this), j.setStyle(f));
				if (e.length == 1) {
					if (f = e[0], U = f.dataLabel, f.slicedTranslation = [I, x], U) {
						U.attr({visibility:ma, align:"center", x:u, y:v + X - 2}), U.x = u;
					}
				} else {
					if (p) {
						ia(e, function (a) {
							if (U = a.dataLabel) {
								var b = a.centerAngle;
								P = v + B[6] * aa(b) + X - 2;
								z = u + B[5] * ca(b);
								U.x = z;
								U._x = z;
								U.y = P;
								if (a.sliced) {
									var b = a.slicedTranslation, c = b[1] - x;
									z += b[0] - I;
									P += c;
								}
								U.attr({visibility:ma, align:"center", x:z, y:P});
								a.dataLabelBG = U.textBound();
							}
						});
					} else {
						ia(e, function (a) {
							if (U = a.dataLabel) {
								var b = a.centerAngle;
								b < 0 && (b = ua + b);
								H[b < Da ? 1 : b < $ ? 2 : b < Va ? 3 : 0].push({point:a, angle:b});
							}
						});
						for (e = h = 4; e--; ) {
							if (t && (f = H[e].length - ba, f > 0)) {
								H[e].sort(a);
								T = H[e].splice(0, f);
								p = 0;
								for (A = T.length; p < A; p += 1) {
									f = T[p].point, f.dataLabel.attr({visibility:"hidden"}), f.connector && f.connector.attr({visibility:"hidden"});
								}
							}
							H[e].sort(c);
						}
						e = ka(H[0].length, H[1].length, H[2].length, H[3].length);
						T = ka(Ja(e, ba) * ha, C);
						H[1].reverse();
						for (H[3].reverse(); h--; ) {
							p = H[h];
							A = p.length;
							t || (ha = A > ba ? T / A : Z, X = ha / 2);
							f = A * ha - X;
							C = T + X;
							for (e = 0; e < A; e += 1, f -= ha) {
								q = Ua(T * aa(p[e].angle)), C - q < ha ? q = C - ha : q < f && (q = f), C = p[e].oriY = q;
							}
							K = d[h];
							A = T - A * ha + X;
							C = -X;
							for (e = p.length - 1; e >= 0; e -= 1, A += ha) {
								f = p[e].point;
								k = p[e].angle;
								L = f.sliced;
								U = f.dataLabel;
								q = Ua(T * aa(k));
								q - C < ha ? q = C + ha : q > A && (q = A);
								C = q;
								O = (q + p[e].oriY) / 2;
								q = u + g[h] * Y * ca(fa.asin(O / T));
								O *= b[h];
								O += v;
								V = v + w * aa(k);
								S = u + D * ca(k);
								z = q + o[h];
								P = O + X - 2;
								U.x = z;
								U._x = z;
								if (s) {
									M = h > 1 ? z : l - z, E = U._str = U._str || U.textStr || U.element && U.element.innerHTML, U.attr({text:j.getSmartText(E, M, r).text});
								}
								k < $ && (O += da, V += da, P += da);
								U.y = P;
								if (L) {
									L = f.slicedTranslation, k = L[0] - I, L = L[1] - x, z += k, q += k, S += k, V += L;
								}
								U.attr({visibility:ma, align:K, x:z, y:P});
								f.dataLabelBG = U.textBound();
								if (J && y && ga) {
									k = f.connector, f.connectorPath = q = [G, S, V, N, ea ? q : S, O, z, O], k ? (k.attr({d:q}), k.attr("visibility", ma)) : f.connector = k = this.chart.renderer.path(q).attr({"stroke-width":y, stroke:i.connectorColor || "#606060", visibility:ma, zIndex:3}).translate(I, x).add();
								}
							}
						}
					}
				}
			};
		}(), rotate:function (a) {
			var c = this.data, d = this.slicedOffset, b = this.slicedOffsetY, g = this.chart.plotLeft, h = this.chart.plotTop, e = n(this.chart.options.chart.startingAngle, 0), f, k = this.center;
			f = (a - e) % 360;
			this.chart.options.chart.startingAngle = n(a, this.chart.options.chart.startingAngle) % 360;
			f = f * Ka / 180;
			this.pie3DManager && this.pie3DManager.rotate(f);
			ia(c, function (a) {
				var c = a.graphic, e = a.shapeArgs, e = {start:e.start += f, end:e.end += f}, n = a.centerAngle = ta((e.start + e.end) / 2), e = a.sliced, p = ca(n), n = aa(n);
				a.slicedTranslation = Ha([p * d + g, n * b + h], Ca);
				a.tooltipPos = [k[0] + p * k[2] * 0.7, k[1] + n * k[4]];
				c && e && a.graphic.attr({translateX:a.slicedTranslation[0], translateY:a.slicedTranslation[1]});
			});
			this.drawDataLabels(!0);
		}, drawPoints:function () {
			var a = this, c = a.chart, d, b;
			ia(a.data, function (g) {
				var h = g.sliced, e = g.slicedTranslation;
				d = g.graphic;
				b = g.shapeArgs;
				d ? d.animate(b) : (g.graphic = a.pie3DManager.createSlice(b.start, b.end, g.color, g._3dAlpha, g.borderColor, g.borderWidth), g.graphic.translate(h ? e[0] : c.plotLeft, h ? e[1] : c.plotTop));
				g.visible === !1 && g.setVisible(!1);
			});
			a.pie3DManager.refreashDrawing();
		}, drawTracker:function () {
			var a = this, c = a.chart, d = +new Date, b = a.options, g, h = [a.center[0] + a.chart.plotLeft, a.center[1] + a.chart.plotTop], e, f = a.options.enableRotation, k, l, j, i, n;
			f && (k = function (b) {
				e = eb(a.chart.container);
				a.rotationStartInstanceAngle = Qa.call(b, h, e) - a.chart.options.chart.startingAngle * ra;
				a.chart.tooltip && (b.type === "dragstart" ? a.chart.tooltip.block(!0) : (a.chart.tooltip.block(!1), a.chart.tooltip.refresh(b.data, !0)));
			});
			ia(a.data, function (p) {
				if (p.y !== null) {
					if (p.link !== void 0) {
						var r = {cursor:"pointer", _cursor:"hand"};
					}
					j = p.graphic;
					j.attr({isTracker:d});
					j.on(Ra ? "touchstart" : "mouseover", function (b) {
						g = b.relatedTarget || b.fromElement;
						if (c.hoverSeries !== a && Aa(g, "isTracker") !== d) {
							a.onMouseOver();
						}
						p.onMouseOver();
					}).on("mouseout", function (c) {
						if (!b.stickyTracking && (g = c.relatedTarget || c.toElement, Aa(g, "isTracker") !== d)) {
							a.onMouseOut();
						}
					}).css(r);
					if (f) {
						l = j._confObject;
						i = l.elements;
						for (n in i) {
							va(i[n].element, "dragstart dragend", k, p), va(i[n].element, "drag", function (b) {
								a.rotate((Qa.call(b, h, e) - a.rotationStartInstanceAngle) / ra);
							});
						}
						va(j.element, "dragstart dragend", k, p);
						va(j.element, "drag", function (b) {
							a.rotate((Qa.call(b, h, e) - a.rotationStartInstanceAngle) / ra);
						});
					}
				}
			});
		}});
		na.pie3d = L;
	}
})();

